正题

题目链接:https://www.luogu.com.cn/problem/P3335


题目大意

给出\(n\times m\)的网格,每个格子有权值。一个回路在格子的边上,要求有\(2\times k\)次左转,其他都是右转,且最后\(2\)次一定得是右转。

求包含的格子权值和最大。

\(1\leq n,m\leq 100,0\leq k\leq 10\)


解题思路

看起来很像插头\(dp\)对吧,但是因为最后两下得是右转所以不是插头\(dp\)。

画一下不难发现包围出来的图形的底部一定是平的,然后上面是一个凹凸的形状。且会有\(k+1\)个凸,\(k\)个凹。也就是将固定的底部划分成\(2\times k+1\)个凹凸相间的矩形。

先枚举一个底部,然后考虑\(dp\)。设\(f_{j,p,h}\)表示现在到第\(j\)列,第\(p\)个正方形,高度为\(h\)时的最大权值。

转移的时候根据\(p\)的奇偶性决定是在上还是在下,当然也可以直接延长这个矩形。

做个前缀和优化就是\(O(n^2mk)\)的了


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110;
int n,m,k,a[N][N],s[N][N],f[N][30][N],g[N][30][N][2],ans;
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 p=1;p<=k;p++)
for(int h=1;h<=n;h++)
f[0][p][h]=g[0][p][h][0]=g[0][p][h][1]=-1e9;
ans=-1e9;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
for(int p=1;p<=k;p++){
for(int h=1;h<=i;h++)
f[j][p][h]=max(f[j-1][p][h],g[j-1][p-1][h][p&1])+s[i][j]-s[i-h][j];
g[j][p][1][1]=g[j][p][i][0]=-1e9;
for(int h=i-1;h>=1;h--)
g[j][p][h][0]=max(g[j][p][h+1][0],f[j][p][h+1]);
for(int h=2;h<=i;h++)
g[j][p][h][1]=max(g[j][p][h-1][1],f[j][p][h-1]);
}
for(int h=1;h<=i;h++)
ans=max(ans,f[j][k][h]);
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. The first day to learn Englisht
  2. MS SQL执行大脚本文件时,提示“内存不足”的解决办法()
  3. python3.5------购物车
  4. 1.7 基础知识——GP2.6 配置管理(CM)
  5. IE10、IE11解决不能播放Flash的问题!
  6. 微分方程&mdash;&mdash;包络和奇解
  7. java 反射: 当Timestamp类型的属性值为null时,设置默认值
  8. CodeForces - 404A(模拟题)
  9. iOS通过ASIHTTPRequest提交JSON数据
  10. Link List
  11. office 文件在网页中显示
  12. 高性能nosql ledisdb设计与实现(1)
  13. 微擎模块的安装文件manifest.xml
  14. dump解析入门-用VS解析dump文件进行排障
  15. ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  16. docker 拷贝镜像文件
  17. Spring 整合 Quartz 实现动态定时任务
  18. java.util.function 中的 Function、Predicate、Consumer
  19. python 操作Sqlite
  20. Learning to rank的讲解,单文档方法(Pointwise),文档对方法(Pairwise),文档列表方法(Listwise)

热门文章

  1. asp.net core的输入模型验证
  2. 菜鸟的springboot常用注解总结
  3. windows笔记-在可执行文件或DLL的多个实例之间共享静态数据
  4. C#基础知识---装箱与拆箱
  5. linux中的分号&amp;&amp;和&amp;,|和||说明与用法
  6. ArcGIS图层添加字段出现:“定义了过多字段”
  7. 修改IDEA默认模板
  8. Python - 面向对象编程 - @property
  9. 云原生数据库 TDSQL-C 产品概述、产品优势、应用场景
  10. asp.NetCore3.1系统自带Imemcache缓存-滑动/绝对/文件依赖的缓存使用测试