1038.收集宝藏
Description
Input
Output
Sample Input
4 1 2 3 10 3 4 1 1 5 2 1 1 1 3 1 1
Sample Output
19
标程:(bfs思想)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxm = 1005;
const int inf = -101;
int dp[maxm][maxm];
int data[maxm][maxm];
int n, m;
void work()
{
int i;
int j;
int k;
dp[0][1] = 0;
dp[1][0] = 0;
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= m; ++j)
{
int temp = inf;
for (k = 1; k < j; ++k)
{
if (j % k == 0)
{
temp = max(temp, dp[i][k]);
}
}
temp = max(temp, dp[i - 1][j]);
temp = max(temp, dp[i][j - 1]);
dp[i][j] = data[i][j] + temp;
}
}
}
int main()
{
while (scanf("%d",&n)!=EOF)
{
memset(dp, inf, sizeof(dp));
m=n;
int i;
int j;
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= m; ++j)
{
scanf("%d", &data[i][j]);
}
}
work();
printf("%d\n", dp[n][m]);
}
return 0;
}