BZOJ 3111 [Zjoi2013]蚂蚁寻路
2016-10-27 16:30
295 查看
【题目分析】
动态规划。
【代码】
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int inf=0x3f3f3f3f; int f[102][25][102],a[102][102],s[102][102],g[102][25][102][2]; int n,m,k,ans=-inf; int main() { scanf("%d%d%d",&n,&m,&k); k=k*2+1; for (int i=1;i<=n;++i) for (int j=1;j<=m;++j) { scanf("%d",&a[i][j]); s[i][j]=s[i-1][j]+a[i][j]; } for (int i=1;i<=k;++i) for (int j=1;j<=n;++j) f[0][i][j]=g[0][i][j][0]=g[0][i][j][1]=-inf; for (int i=1;i<=n;++i) for (int j=1;j<=m;++j) { for (int p=1;p<=k;++p) { for (int h=i;h;--h) f[j][p][h]=max(f[j-1][p][h],g[j-1][p-1][h][p%2])+s[i][j]-s[h-1][j]; g[j][p][1][0]=-inf; for (int h=2;h<=i;++h) g[j][p][h][0]=max(g[j][p][h-1][0],f[j][p][h-1]); g[j][p][i][1]=-inf; for (int h=i-1;h;--h) g[j][p][h][1]=max(g[j][p][h+1][1],f[j][p][h+1]); } ans=max(ans,max(f[j][k][i],g[j][k][i][0])); } printf("%d\n",ans); }
相关文章推荐
- bzoj 3111: [Zjoi2013]蚂蚁寻路(DP)
- 3111: [Zjoi2013]蚂蚁寻路 - BZOJ
- [DP] BZOJ 3111 [Zjoi2013]蚂蚁寻路
- bzoj 3111: [Zjoi2013]蚂蚁寻路 动态规划
- bzoj 3111: [Zjoi2013]蚂蚁寻路
- [BZOJ 3111] ZJOI 2013 蚂蚁寻路 · 动态规划
- bzoj3111: [Zjoi2013]蚂蚁寻路
- bzoj3111 [Zjoi2013]蚂蚁寻路
- 【洛谷3335】【ZJOI2013】蚂蚁寻路
- bzoj千题计划121:bzoj1033: [ZJOI2008]杀蚂蚁antbuster
- [BZOJ 3112][ZJOI 2013]防守战线
- 【整体二分】[ZJOI 2013] bzoj3110 K大数查询
- 【BZOJ 1033】 [ZJOI2008]杀蚂蚁antbuster(判断线段是否和圆相交)
- BZOJ 3112 [Zjoi2013]防守战线
- bzoj 3214: [Zjoi2013]丽洁体 贪心+暴力
- [BZOJ 1033] [ZJOI2008] 杀蚂蚁antbuster 【模拟!】
- 【BZOJ】3110 [Zjoi2013]K大数查询 整体二分+树状数组 || 树套树
- BZOJ 3110 (zjoi 2013)k大数查询(树套树)
- 【BZOJ1033】[ZJOI2008]杀蚂蚁antbuster
- BZOJ 3110 ZJOI 2013 K大数查询 树套树(权值线段树套区间线段树)