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;

}

上述两种方法相比后者无论从时间上还是从空间上都比前者较好!

你可能感兴趣的:(动态规划)