您的位置:首页 > 其它

NYOJ 18 The Triangle (动态规划复习)

2013-04-18 22:00 239 查看
#include<stdio.h>
int f[105][105],c[105][105];
inline int max(int a,int b){
if(a>b) return a;
return b;
}
int main()
{
int i,j,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
scanf("%d",&c[i][j]);
for(i=n;i>0;i--)
for(j=1;j<=i;j++){
f[i][j]=max(f[i+1][j],f[i+1][j+1])+c[i][j];
}
printf("%d\n",f[1][1]);
return 0;
}


动态规划思想,自底向上!还有另种方法,是自顶向下,不知道算不算动态规划!贴上代码:

#include<stdio.h>
int f[105][105];
inline int max(int a,int b){
if(a>b) return a;
return b;
}
int main()
{
int i,j,c,n,m=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=i;j++){
scanf("%d",&c);
f[i][j]+=max(f[i-1][j],f[i-1][j-1])+c;
if(m<f[i][j]) m=f[i][j];
}
printf("%d\n",m);
return 0;
}


上述两种方法相比后者无论从时间上还是从空间上都比前者较好!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: