DP+思维

思路

这道题的切入点是mmm,发现mmm只有两种取值,那么我们就可以尝试对mmm分类讨论

m=1

发现在m=1m=1m=1时就是在一个一维序列上做k个最大子段和,我们定义f[i][j]f[i][j]f[i][j]表示处理到第iii位,共jjj个矩阵的最大和,咋转移?
1.1.1. 假设这一位不选,那就是f[i][j]=f[i−1][j]f[i][j]=f[i-1][j]f[i][j]=f[i−1][j]
2.2.2.否则枚举上一个矩形结束位置kkk,那么
f[i][j]=max(f[i][j],f[k][j−1]+s[k]−s[j]f[i][j]=max(f[i][j],f[k][j-1]+s[k]-s[j]f[i][j]=max(f[i][j],f[k][j−1]+s[k]−s[j]
s是前缀和
最后输出f[n][e]f[n][e]f[n][e]就好了

m=2

在二维下,我们类比一维,但是因为一个矩形可以占据一列 ,也可以占据两列,所以我们定义g[i][j][k]g[i][j][k]g[i][j][k]表示第一列到第iii行,第二列到第jjj行,共k个矩形的最大和,如何转移?我们枚举iii,jjj
1.1.1.i,ji,ji,j都不选,g[i][j][k]=max(g[i−1][j][k],g[i][j−1][k])g[i][j][k]=max(g[i-1][j][k],g[i][j-1][k])g[i][j][k]=max(g[i−1][j][k],g[i][j−1][k])
2.2.2.考虑在第一列上转移,枚举ppp,可以得到
g[i][j][k]=max(g[i][j][k],g[p][j][k−1]+s1[i]−s1[p])g[i][j][k]=max(g[i][j][k],g[p][j][k-1]+s1[i]-s1[p])g[i][j][k]=max(g[i][j][k],g[p][j][k−1]+s1[i]−s1[p])
3.3.3.考虑在第二列上转移,枚举ppp,可以得到
g[i][j][k]=max(g[i][j][k],g[i][p][k−1]+s2[j]−s2[p])g[i][j][k]=max(g[i][j][k],g[i][p][k-1]+s2[j]-s2[p])g[i][j][k]=max(g[i][j][k],g[i][p][k−1]+s2[j]−s2[p])
4.4.4.考虑两列一起转移,这样的情况存在,当且仅当i=ji=ji=j时,这样才能构造出一个新矩形,然后我们枚举一个p,可以得到
g[i][j][k]=max(g[i][j][k],g[p][p][k−1]+s1[i]−s1[p]+s2[j]−s2[p])g[i][j][k]=max(g[i][j][k],g[p][p][k-1]+s1[i]-s1[p]+s2[j]-s2[p])g[i][j][k]=max(g[i][j][k],g[p][p][k−1]+s1[i]−s1[p]+s2[j]−s2[p])
s1s1s1是第一列前缀和,s2s2s2是第二列前缀和
最后输出g[n][n][e]g[n][n][e]g[n][n][e]

代码

//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=105;
int n,m,e,a[M][3];
int s1[M],s2[M],f[M][M],g[M][M][M];
signed main()
{scanf("%d%d%d",&n,&m,&e);for (int i=1;i<=n;i++)for (int k=1;k<=m;k++)scanf("%d",&a[i][k]);if (m==1){for (int i=1;i<=n;i++) s1[i]=s1[i-1]+a[i][1];for (int i=1;i<=e;i++)for (int k=1;k<=n;k++){f[k][i]=f[k-1][i];for (int j=0;j<k;j++)f[k][i]=max(f[k][i],f[j][i-1]+s1[k]-s1[j]);}return printf("%d",f[n][e]),0;}for (int i=1;i<=n;i++) s1[i]=s1[i-1]+a[i][1],s2[i]=s2[i-1]+a[i][2];for (int i=1;i<=e;i++)for (int k=1;k<=n;k++)for (int j=1;j<=n;j++){g[k][j][i]=max(g[k-1][j][i],g[k][j-1][i]);for (int p=0;p<k;p++) g[k][j][i]=max(g[k][j][i],g[p][j][i-1]+s1[k]-s1[p]);for (int p=0;p<j;p++)g[k][j][i]=max(g[k][j][i],g[k][p][i-1]+s2[j]-s2[p]);if (k==j) for (int p=0;p<k;p++)g[k][j][i]=max(g[k][j][i],g[p][p][i-1]+s1[k]+s2[j]-s1[p]-s2[p]);}printf("%d",g[n][n][e]);return 0;
}

BZOJ1084洛谷P2331 [SCOI2005]最大子矩阵相关推荐

  1. [T][3]洛谷 P2331 [SCOI2005] 最大子矩阵

    题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

  2. 洛谷 P2331 [SCOI2005]最大子矩阵

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P2331 [SCOI2005]最大子矩阵 题目 题目描述 这里有一个 n*m 的矩阵,请你选出其中 k 个子矩阵,使得这个 k 个子 ...

  3. 信息学奥赛一本通 1392:繁忙的都市(city) | 洛谷 P2330 [SCOI2005]繁忙的都市

    [题目链接] ybt 1392:繁忙的都市(city) 洛谷 P2330 [SCOI2005]繁忙的都市 [题目考点] 1. 图论 最小生成树 [解题思路] 将题目叙述转为图论概念,交叉路口为顶点,道 ...

  4. 洛谷 P2327 [SCOI2005]扫雷

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P2327 [SCOI2005]扫雷 题目 题目描述 相信大家都玩过扫雷的游戏.那是在一个 n*m 的矩阵里面有一些雷,要你根据一些信 ...

  5. P2331 [SCOI2005]最大子矩阵 题解

    DP 题,好像有点恶心,主要是因为能不能选空矩阵的问题. 有些数据好像是可以选空矩阵的有些又不能选,就很离谱,但是根据原数据来看空矩阵应该是不能选的,我也不知道具体情况() 注意到 m=1m=1m=1 ...

  6. P2331 [SCOI2005]最大子矩阵(DP分类讨论)

    P2331 [SCOI2005]最大子矩阵(DP&分类讨论) 考虑dp解决. 若m=1m=1m=1则是一个简单的递推. 若m=2m=2m=2则是分情况讨论. 一个是当前行不取. 一个是选第一列 ...

  7. 洛谷P2327 [SCOI2005]扫雷 题解

    [SCOI2005]扫雷 - 洛谷 description: 一个 的棋盘.已知右侧一列全部没有雷,且已知第 行相应的格子为 ,表示八联通的格子内共有 个雷.求左侧一列可能的雷的方案数. soluti ...

  8. 洛谷P2331最大子矩阵

    其实那,我是被标题吸引来的 你康康,最大子矩阵!多么人畜无害的名字啊~~~ 然后发生了什么吗大家都应该猜到啦!然后一读题,让你求出k个子矩阵的最大值! 但是呢?发现这是一个n*m的矩阵废话!然后.. ...

  9. [dp]洛谷 P2331 最大子矩阵

    题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

最新文章

  1. 浏览器HTTP缓存机制
  2. 小米路由器 梅林_WIFI6真的有用吗?小米ALOT路由器AX3600上手体验!小米智能家居生态之选及选购分析...
  3. 计算机学业水平测试网,学业水平测试
  4. 内存分配——栈、堆、静态区、符号区等等
  5. 有了BBdoc文档搜索,就不要使用DocFetcher 全文搜索了
  6. 杂志订阅系统c语言,杂志订阅管理系统
  7. 宏定义是什么?为什么要进行宏定义?宏定义的格式
  8. Open the World 丨 COSCon'22志愿者招募正式启动
  9. 如何VUE写桌面应用(electron)
  10. 走出软件作坊 第三十章 蛋白质女孩
  11. cmake:基于MDK(Keil)的Nationstech.N32G45x平台交叉编译工具链定义
  12. Single Threaded Execution模式
  13. 机器学习之使用sklearn构建据类模型,并且评价模型
  14. 【OpenCV 例程200篇】205. 调节色彩平衡/饱和度/明度
  15. ICMP协议及报文格式
  16. 分布式系统架构系列讲解八(分布式一致性 8):PBFT算法
  17. Free-Form Image Inpainting with Gated Convolution
  18. 生成图-深度优先搜索/宽度优先搜索
  19. Math 函数-- cos()和acos()
  20. 关于电脑使用墨墨背单词使用键盘操作问题

热门文章

  1. FCC认证和FCC ID认证获证后标签该怎么打?
  2. C++核心准则ES.30: 不要使用宏进行程序中的文本操作​
  3. 安全事件响应观察报告及其变种
  4. 迅捷思维导图支持的文件格式
  5. 计算机中的应用软件是指什么意思,为什么电脑上的软件称为软件,手机上的软件却叫做应用或者是APP?...
  6. 计算机基础(16)——Office和WPS(3)——什么查看自己的WPS是哪个版本
  7. Python语言有哪些特点?3分钟了解
  8. BUUCTF misc 专题(52)[HBNIS2018]excel破解
  9. MacOS搭建OMNeTpp+Veins+SUMO车联网仿真平台
  10. 哪些主板支持三代服务器内存,支持三代内存的主板CPU有哪些