poj1157 LITTLE SHOP OF FLOWERS
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<algorithm> using namespace std; int n,m; #define MIN -65530 int a[110][110]; int d[110][110];//到达此点之后还能获得的最大值 void dp(int i,int j) { int jj; for(jj=j+1;jj<=m-n+i+1;jj++) { if(d[i+1][jj]==MIN) { dp(i+1,jj); } if(d[i][j]<d[i+1][jj]+a[i+1][jj]) { d[i][j]=d[i+1][jj]+a[i+1][jj]; } } } int main() { while(scanf("%d %d",&n,&m)!=EOF) { int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) { scanf("%d",&a[i][j]); d[i][j]=MIN; } } for(i=0;i<n;i++) { d[i][m-1]=0; } int mmax=MIN; for(j=0;j<=m-n;j++) { dp(0,j); if(mmax<d[0][j]+a[0][j]) { mmax=d[0][j]+a[0][j]; } } printf("%d\n",mmax); } return 0; }