`
923723914
  • 浏览: 628119 次
文章分类
社区版块
存档分类
最新评论

hdu 2571 命运

 
阅读更多

hdu 2571 命运

动态规划, dp[i][j] = max(dp[i - 1][j], dp[i][j - 1], dp[i][j / k])

#include <stdio.h>

#define MAX 1005
#define INF -0xffffff
#define max(a, b) (a > b ? a : b) 

int dp[21][MAX];
int map[21][MAX];
int n, m;

int main() {
	int T;
	int i, j;
	int k;

	while (scanf("%d", &T) != EOF) {
		while (T--) {
			scanf("%d%d", &n, &m);
			for (i = 1; i <= n; i++) {
				for (j = 1; j <= m; j++) {
					scanf("%d", &map[i][j]);
				}
			}

			for (i = 0; i <= n; i++) {
				dp[i][0] = INF;
			}
			for (j = 0; j <= m; j++) {
				dp[0][j] = INF;
			}
			dp[0][1] = dp[1][0] = 0;

			for (i = 1; i <= n; i++) {
				for (j = 1; j <= m; j++) {
					dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + map[i][j];

					for (k = 2; j / k > 0; k++) {
						if (j % k == 0) {
							dp[i][j] = max(dp[i][j], dp[i][j / k] + map[i][j]);
						}
					}
				}
			}

			printf("%d\n", dp[n][m]);
		}
	}

	return 0;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics