bzoj3111: [Zjoi2013]蚂蚁寻路
2018-08-18 21:59
239 查看
题目链接
bzoj3111: [Zjoi2013]蚂蚁寻路题解
发现走出来的图是一向上的凸起锯齿状对于每个突出的矩形dp一下就好了
代码
/* */ #include<cstdio> #include<algorithm> const int maxn = 127; inline int read() { int x = 0,f = 1; char c = getchar(); while(c < '0' || c > '9'){if(c == '-')f = -1;c = getchar();} while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar(); return x * f; } const int INF = 0x3f3f3f3f; const int rp = 0x7fffffff; int n,m,k; int sum[maxn][maxn],a[maxn][maxn]; int g[maxn][25][maxn][2]; int dp[maxn][maxn][maxn]; int main() { int ans = -0x3f3f3f3f; n = read(),m = read(),k = read(); k = k << 1 | 1; for(int i = 1;i <= n;++ i) for(int j = 1;j <= m;++ j) a[i][j] = read(), sum[i][j] = sum[i - 1][j] + a[i][j]; for(int i = 1;i <= k;++ i) for(int j = 1;j <= n;++ j) g[0][i][j][0] = g[0][i][j][1] = dp[0][i][j] = -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) dp[j][p][h] = std::max(dp[j - 1][p][h],g[j - 1][p - 1][h][p % 2]) - sum[h - 1][j] + sum[i][j]; g[j][p][1][0] = -INF; for(int h = 2;h <= i;++ h) g[j][p][h][0] = std::max(dp[j][p][h - 1],g[j][p][h - 1][0]); g[j][p][i][1] = -INF; for(int h = i - 1;h;-- h) g[j][p][h][1] = std::max(dp[j][p][h + 1],g[j][p][h + 1][1]); } ans = std::max(ans,std::max(dp[j][k][i],g[j][k][i][0]) ); } printf("%d\n",ans); return 0; }
相关文章推荐
- bzoj3111 [Zjoi2013]蚂蚁寻路
- 3111: [Zjoi2013]蚂蚁寻路 - BZOJ
- bzoj 3111: [Zjoi2013]蚂蚁寻路(DP)
- BZOJ 3111 [Zjoi2013]蚂蚁寻路
- [BZOJ 3111] ZJOI 2013 蚂蚁寻路 · 动态规划
- bzoj 3111: [Zjoi2013]蚂蚁寻路 动态规划
- bzoj 3111: [Zjoi2013]蚂蚁寻路
- 【洛谷3335】【ZJOI2013】蚂蚁寻路
- [DP] BZOJ 3111 [Zjoi2013]蚂蚁寻路
- 【BZOJ3110】[Zjoi2013]K大数查询 树套树
- [BZOJ3110][Zjoi2013]K大数查询
- 【BZOJ3112】[ZJOI2013]防守战线
- bzoj3110 [Zjoi2013]K大数查询(整体二分+线段树)
- bzoj 3214: [Zjoi2013]丽洁体 贪心&动态规划
- 【bzoj3110】【ZJOI2013】【K大数查询】【权值线段树套位置线段树】
- [BZOJ 3112][Zjoi2013]防守战线:单纯形
- 【BZOJ 3110】【ZJOI 2013】K大数查询
- BZOJ3110 ZJOI2013 K大数查询
- 【整体二分+树状数组区间加区间和】BZOJ3110 [Zjoi2013]K大数查询
- [bzoj3112][Zjoi2013]防守战线