NYOJ 18 The Triangle (动态规划复习)
1 #include<stdio.h> 2 int f[105][105],c[105][105]; 3 inline int max(int a,int b){ 4 if(a>b) return a; 5 return b; 6 } 7 int main() 8 { 9 int i,j,n; 10 scanf("%d",&n); 11 for(i=1;i<=n;i++) 12 for(j=1;j<=i;j++) 13 scanf("%d",&c[i][j]); 14 for(i=n;i>0;i--) 15 for(j=1;j<=i;j++){ 16 f[i][j]=max(f[i+1][j],f[i+1][j+1])+c[i][j]; 17 } 18 printf("%d\n",f[1][1]); 19 return 0; 20 }
动态规划思想,自底向上!还有另种方法,是自顶向下,不知道算不算动态规划!贴上代码:
#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; }
上述两种方法相比后者无论从时间上还是从空间上都比前者较好!