hduoj_2571(dp,简单题)

思路很清晰,就是调了很长时间。

找k的因数的时候,循环终止条件是到k-1。

我不知道为什么写成了sqrt(k)。想不起来为什么这么写。

附代码。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int map[30][2000];
int dp[30][2000];

int max(int a, int b)
{
	return a > b ? a : b;
}

int main()
{
	int C;
	int n, m;
	int i, j;
	int k;
	int temp;
	scanf("%d", &C);
	while (C--)
	{
		scanf("%d %d", &n, &m);
		memset(dp, 0, sizeof(dp));
		memset(map, 0, sizeof(map));
		for (i = 1; i <= n; i++)
		{
			for (j = 1; j <= m; j++)
				scanf("%d", &map[i][j]);
		}

		// the first column
		dp[1][1] = map[1][1];
		for (i = 2; i <= n; i++)
			dp[i][1] = dp[i - 1][1] + map[i][1];

		for (i = 1; i <= n; i++)
		{
			for (j = 2; j <= m; j++)
			{
				temp = dp[i][j - 1];
				for (k = 1; k < j; k++)
				{
					if (0 == j%k)
						temp = max(dp[i][k], temp);
				}
				if (i >= 2)
					temp = max(temp, dp[i - 1][j]);
				
				dp[i][j] = temp + map[i][j];
			}
		}
		printf("%d\n", dp[n][m]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_32862515/article/details/80721611