题意:
三角形从上到下求最大值,只能向下或向右下
要点:
好简单的DP题,看了一下白书DP的介绍,3分钟就过了,DP白书上有很详细的解释,可以好好看看
代码如下:
#include<stdio.h>
#include<string.h>
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int n,i,j;
int dp[355][355], a[355][355];
while (scanf("%d", &n) != EOF)
{
memset(dp, 0, sizeof(dp));
for (i = 1; i <= n; i++)
for (j = 1; j <= i; j++)
scanf("%d", &a[i][j]);
for (i = 1; i <= n; i++)
dp[n][i] = a[n][i];//从底下开始
for (i = n - 1; i >= 1; i--)//i因为是逆序枚举的,所以i+1都已经求出来了
for (j = 1; j <= i; j++)
{
dp[i][j] = a[i][j] + max(dp[i + 1][j], dp[i + 1][j + 1]);
}
printf("%d\n", dp[1][1]);
}
return 0;
}