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]);

浙公网安备 33010602011771号