题目意思不多说了,从题目中的图可以理解,就是让我们求最大值。
刚开始我用了DFS,结果超时了,后来就改用了DP。
#include <stdio.h>
#include <string.h>
#define max(a,b) a>b?a:b
int n,i,j,map[355][355],dp[355][355];
int main()
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
scanf("%d",&map[i][j]);
}
}
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
dp[i][j]=max(dp[i-1][j]+map[i][j],dp[i-1][j-1]+map[i][j]); //从第1行第1列开始到第i行第j列的和
}
}
//将所有和进行比较,取最大值输出
int max=-1;
for(i=1;i<=n;i++)
if(dp[n][i]>max)
max=dp[n][i];
printf("%d\n",max);
return 0;
}