BZOJ 1910: [Ctsc2002] Award 颁奖典礼
2017-12-13 21:39
489 查看
分成三个矩形 f[0..2][i][l][r] dp即可。
#include<bits/stdc++.h> #define me(a,x) memset(a,x,sizeof a) using namespace std; const int N=202,inf=1e9+7; char O[1<<14],*S=O,*T=O; #define gc (S==T&&(T=(S=O)+fread(O,1,1<<14,stdin),S==T)?-1:*S++) inline int read(){ int x=0,f=1; char ch=gc; while(ch<'0' || ch>'9'){if(ch=='-')f=-1; ch=gc;} while(ch>='0' && ch<='9'){x=(x<<1)+(x<<3)+(ch^48); ch=gc;} return x*f; } bool a ; int f[2][3] ,mx ; int main(){ int n=read(),m=read(),t,i,j,l,r; for(i=1;i<=n;++i) for(j=1;j<=m;++j) a[i][j]=read(); me(f,-63); int u=0,ans=0; for(i=1;i<=n;++i,u^=1){ me(f[u],-63); for(l=1;l<=m;++l) for(r=l;r<=m && !a[i][r];++r) f[u][0][l][r]=max(f[u^1][0][l][r],0)+r-l+1; me(mx,-63); for(l=2;l<m;++l){ for(j=m;j>l;--j)mx[j]=max(max(mx[j],mx[j+1]),f[u^1][0][l-1][j]); for(r=l;r<m && !a[i][r];++r) f[u][1][l][r]=max(f[u^1][1][l][r],mx[r+1])+r-l+1; } me(mx,-63); for(l=m-2;l;--l){ for(j=l+1;j<m;++j)mx[j]=max(max(mx[j],mx[j-1]),f[u^1][1][l+1][j]); for(r=l;r<=m && !a[i][r];++r) f[u][2][l][r]=max(f[u^1][2][l][r],mx[r-1])+r-l+1, ans=max(ans,f[u][2][l][r]); } } printf("%d\n",ans); return 0; }
相关文章推荐
- bzoj 1910: [Ctsc2002] Award 颁奖典礼 动态规划
- BZOJ 1910 [Ctsc2002] Award 颁奖典礼
- [BZOJ1910][CTSC2002]颁奖典礼 DP
- [bzoj1910] [Ctsc2002] Award 颁奖典礼
- bzoj1910: [Ctsc2002] Award 颁奖典礼
- [BZOJ2548][Ctsc2002]灭鼠行动(大模拟)
- [BZOJ2547][CTSC2002]玩具兵 二分图匹配+spfa+二分
- [Bzoj 2547] [Ctsc2002] 玩具兵
- BZOJ2548 [CTSC2002] 灭鼠行动
- bzoj 2547: [Ctsc2002]玩具兵 bfs&最大匹配
- bzoj2547 [Ctsc2002]玩具兵 dp+二分匹配
- bzoj1143 [CTSC2008]祭祀river
- 【BZOJ2002】【HNOI2010】弹飞绵羊(LCT)
- bzoj 2306: [Ctsc2011]幸福路径
- [BZOJ 1146] [CTSC2008]网络管理Network
- bzoj3555 [Ctsc2014]企鹅QQ(hash+枚举)
- bzoj 2002 LCT
- bzoj 1150 [CTSC2007]数据备份Back…
- [bzoj 1143--CTSC2008]祭祀
- 【bzoj 2002】弹飞绵羊