// poj 1157-LITTLE SHOP OF FLOWERS /* * 动态规划-花束摆放 * 状态转移方程:dp(i,j)=max(dp(i-1,j-1)+a[i][j],dp(i,j-1)) * !!!负值的处理 * 初始化 dp为小值&&将第一束放入 * 测试数据: * 3 5 * -50 -50 -50 -50 -50 * -50 -50 -50 -50 -50 * -50 -50 -50 -50 -50 * 答案是 -150 * wa wa ac 184k 0ms */ #include<iostream> using namespace std; #define MAX 102 #define INF 0xfffffff int DP[MAX][MAX],a[MAX][MAX]; int main() { int i,j,F,V; while(scanf("%d%d",&F,&V)!=EOF){ for(i=1; i<=F; ++i) for(j=1; j<=V; ++j) scanf("%d",&a[i][j]); for(i=0; i<=F; ++i) for(j=0; j<=V; ++j) DP[i][j]=-INF; for(i=1; i<=V; ++i) DP[1][i]=max(DP[1][i-1],a[1][i]); for(i=2; i<=F; ++i) for(j=1; j<=V; ++j) DP[i][j]=max(DP[i-1][j-1]+a[i][j],DP[i][j-1]); printf("%d/n",DP[F][V]); } return 0; }