poj 3176 Cow Bowling

最简单的那种DP,3种方法:

1. 记忆化搜索:

int dp(int i,int j)
{
    if(c[i][j]>=0) return c[i][j];
    if(i==n-1) return c[i][j]=b[i][j];
    return c[i][j]=max(dp(i+1,j),dp(i+1,j+1))+b[i][j];
}
..............................................................................
 memset(c,-1,sizeof(c)); //这里注意初始化-1不是0,因为题中的结果可能是0
    dp(0,0);
    printf("%d",c[0][0]);

2.递推方程:

memset(c,0,sizeof(c));
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<=i; j++)
        {
            cin>>b[i][j];
        }
    }
    for(int i=n-1;i>=0;i--){
    for(int j=0;j<=i;j++){
     c[i][j]=max(c[i+1][j],c[i+1][j+1])+b[i][j];
    }
    }
    printf("%d",c[0][0]);

3.滚动数组:

   int c[351];
   for(int i=n-1;i>=0;i--){
    for(int j=0;j<=i;j++){
     c[j]=max(c[j],c[j+1])+b[i][j];
    }
   }
   printf("%d",c[0]);

 

posted @ 2016-03-05 09:58  cherry_yue  阅读(41)  评论(0)    收藏  举报