应该是第一次写这种图形类的DP。。
一个“I”可以分成三个矩形。。令f[1..3][i][j][k]表示第几个矩形,下边界为第i行的j~k列,的最大面积。
然后就是各种优化啊什么的。。。时间复杂度O(nm²)
一开始一个辅助的区间DP写挂然后调了半天TAT
1 #include2 #include 3 #include 4 using namespace std; 5 const int maxn=205; 6 const int inf=1002333; 7 int f[2][3][maxn][maxn]; 8 int sm[maxn][maxn],mx1[maxn][maxn],mx2[maxn][maxn]; 9 int n,m,pre,now,ans,tmpmx;10 11 int ra;char rx;12 inline int read(){13 rx=getchar(),ra=0;14 while(rx<'0'||rx>'9')rx=getchar();15 while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra;16 }17 inline int max(int a,int b){ return a>b?a:b;}18 inline int min(int a,int b){ return a j;k--)36 tmpmx=max(tmpmx,f[pre][0][j][k]),37 mx1[j][k]=max(mx1[j-1][k],tmpmx);38 for(j=2;j ans)ans=f[now][2][j][k];57 }58 }59 printf("%d\n",ans);60 return 0;61 }