Description
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
Input
Output
Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Output
30
小结:
动态规划,还真的是我永远的痛....新手表示很头疼!!!
以下是AC代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int map[200][200];
int dp[200][200];
int ans,n,fans;
int dir[2][2]={1,0,1,1};
int ok(int a,int b)
{
if(a<1||b<1||a>n||b>n||b>a)
return 0;
return 1;
}
int maxlen(int a,int b)
{
if(dp[a][b])
return dp[a][b];
int m=0;
for(int i=0;i<2;i++)
{
int aa=a+dir[i][0];
int bb=b+dir[i][1];
if(!ok(aa,bb))
continue;
m=maxlen(aa,bb)>m?maxlen(aa,bb):m;
}
dp[a][b]=m+map[a][b];
return dp[a][b];
}
int main()
{
while(~scanf("%d",&n))
{
ans=0;
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
scanf("%d",&map[i][j]);
}
}
for(int i=1;i<=n;i++)
{
dp[n][i]=map[n][i];
}
ans=maxlen(1,1);
printf("%d\n",ans);
}
return 0;
}
本文探讨了使用动态规划方法解决数列三角形中寻找最高和路径的问题,提供了完整的AC代码实现,适合初学者学习。
3089

被折叠的 条评论
为什么被折叠?



