Reprint Please specify source:http://blog.csdn.net/vmurder/article/details/42913169
Exercises
This data range, to mess it up, teenager.
My mess:
Do it again when you m==1, and do it again when you m==2.
Do not discuss the situation is good, m==2 time complexity of n^3.
Code:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 105using namespace Std;int map[n][3],s[n][3],sum[n];int f[n][n][12],g[n][12];int n,m,p;int Main () {//freopen ("test.in", "R", stdin), int i,j,k,t;scanf ("%d%d%d", &n,&m,&p), for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf ("%d", &MAP[I][J]), if (m==1) {for (i=1;i<=n;i++) sum[i]=sum[i-1]+map[i][1];for (k=1;k<=p;k++) {for (i=1;i<=n;i+ +) {G[i][k]=max (g[i-1][k],g[i][k-1]); for (j=1;j<i;j++) G[i][k]=max (G[i][k],g[j][k-1]+sum[i]-sum[j]);}} printf ("%d\n", G[n][p]);} else {for (i=1;i<=n;i++) {s[i][1]=s[i-1][1]+map[i][1];s[i][2]=s[i-1][2]+map[i][2];s[i][0]=s[i][1]+s[i][2];} for (k=0;k<=p;k++) for (i=0;i<=n;i++) for (j=0;j<=n;j++) {if (i) F[i][j][k]=max (F[i][j][k],f[i-1][j][k]), if (j ) F[i][j][k]=max (F[i][j][k],f[i][j-1][k]), if (k) F[i][j][k]=max (F[i][j][k],f[i][j][k-1]), if (i&&j) f[i][j][ K]=max (F[i][j][k],f[i-1][j-1][k]); for (t=i+1;t<=n;t++) F[t][j][k+1]=max (f[t][j][k+1],f[i][j][k]+s[T][1]-S[I][1]); for (t=j+1;t<=n;t++) F[i][t][k+1]=max (f[i][t][k+1],f[i][j][k]+s[t][2]-s[j][2]); int Temp=max (i,j ); for (t=temp+1;t<=n;t++) F[t][t][k+1]=max (f[t][t][k+1],f[i][j][k]+s[t][0]-s[temp][0]);} printf ("%d\n", F[n][n][p]);} return 0;}
"BZOJ1084" "SCOI2005" maximum sub-matrix silly motion gauge