状态转移方程:dp[i][j]=max{dp[i-1][k]}(i-1<=k<=j-1)+a[i][j]
代码:
#include<stdio.h> int F,V; int a[100][100]; int dp[100][100]; int main() { scanf("%d%d",&F,&V); for (int i=0; i<F; i++) for (int j=0; j<V; j++) scanf("%d",a[i]+j); for (int i=0; i<V; i++) //处理边界 dp[0][i]=a[0][i]; for (int i=1; i<F; i++) for (int j=i; j<V; j++) { int max=-100000000; for (int k=i-1; k<j; k++) if(dp[i-1][k]>max) max=dp[i-1][k]; dp[i][j]=max+a[i][j]; } int max=-100000000; for (int j=F-1; j<V; j++) if (dp[F-1][j]>max) max=dp[F-1][j]; printf("%d\n",max); }