夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

あすせんてぃしずむ

めんどいのでコード添付のみ

3620

#include <cstdio>
#include <algorithm>
using namespace std;
int d[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int map[100][100];
int n,m,k;
int dfs(int x, int y, int sz) {
	map[x][y]=0;
	sz++;
	int res=0;
	for (int i=0; i<4; i++) {
		int nx=x+d[i][0], ny=y+d[i][1];
		if (nx>=0&&nx<n&&ny>=0&&ny<m&&map[nx][ny]) {
			sz = dfs(nx,ny,sz);
		}
	}
	return sz;
}
int main() {
	int r,c,i,j;
	scanf("%d%d%d",&n,&m,&k);
	for (i=0; i<n; i++) for (j=0; j<m; j++) map[i][j] = 0;
	for (i=0; i<k; i++) {
		scanf("%d%d",&r,&c);
		map[r-1][c-1] = 1;
	}
	int res=0;
	for (i=0; i<n; i++) for (j=0; j<m; j++) {
		if (map[i][j]) {
			res = max(dfs(i,j,0), res);
		}
	}
	printf("%d\n",res);
}

3619

#include <cstdio>
struct cow { int s,t,r; };
int n,k;
cow c;
int main() {
	scanf("%d%d",&n,&k);
	for (int i=0; i<k; i++) {
		scanf("%d%d%d",&c.s,&c.t,&c.r);
		int need=n/c.s;
		if (n%c.s) need++;
		int x=need/c.t;
		int y=need-x*c.t;
		int res=x*(c.t+c.r);
		if (y) res+=y;
		else res-=c.r;
		// printf("%d %d %d ",need,x,y);
		printf("%d\n",res);
	}
}

// need->ok
// res-> x=need/c.t:=フルで必要とする回数 y=need-x*c.t:=あまりの時間 ⇒ res=x*(c.t+c.r)+y

3176

#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
	int n; scanf("%d",&n);
	int map[n][n];
	for (int i=0; i<n; i++) for (int j=0; j<i+1; j++) scanf("%d",&map[i][j]);
	int dp[n][n];
	for (int i=0; i<n; i++) for (int j=0; j<n; j++) dp[i][j]=0;
	dp[0][0]=map[0][0];
	for (int i=1; i<n; i++) {
		dp[i][0]=map[i][0]+dp[i-1][0];
		dp[i][i]=map[i][i]+dp[i-1][i-1];
		for (int j=1; j<i; j++) {
			dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+map[i][j];
		}
	}
	int res=0;
	for (int i=0; i<n; i++) res=max(res,dp[n-1][i]);
	printf("%d\n",res);
}