给出 $n * 1$ 的矩阵,选出 $k$ 个互不重叠的子矩阵,使得其最大
$sum[i]$ 为列的前缀和
设 $f[i][j]$ 表示前 $i$ 个数选出 $j$ 个互不重叠的子矩阵的最大价值
若第 $i$ 个数不属于第 $j$ 个矩阵 $f[i][j] = f[i - 1][j]$
否则枚举第 $j$ 个矩阵的起点 $s$,$f[i][j] = max(f[i][j], f[s - 1][j - 1] + sum[i] - sum[s - 1])$

给出 $n * 2$ 的矩阵,选出 $k$ 个互不重叠的子矩阵,使得其最大
$sum[i][1]$ 为列 $1$ 的前缀和
$sum[i][2]$ 为列 $2$ 的前缀和
$f[i][j][use]$ 表示第 $1$ 列选到的 $i$ 行,第 $2$ 列选到了 $j$ 行,选了 $use$ 个矩阵的最大价值和
考虑枚举 $i, j, use$
第 $i$ 行第 $1$ 列不属于子矩阵或第 $j$ 行第 $2$ 列不属于子矩阵
$f[i][j][use] = std:: max(f[i - 1][j][use], f[i][j - 1][use])$
第 $i$ 行第 $1$ 列和第 $j$ 行第 $2$ 列属于不同的子矩阵
分别枚举第 $i$ 行第 $1$ 列所在子矩阵的起始点和第 $j$ 行第 $2$ 列所在子矩阵的起始点并更新答案,

$f[i][j][use] = max (f[i][j][use], max(f[h-1][j][l-1]+(sum1[i]-sum1[h-1]), 1<=h<=i))$
$f[i][j][use] = max (f[i][j][use], max(f[i][h-1][l-1]+(sum2[j]-sum2[h-1]),1<=h<=j))$

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> #define gc getchar() inline int read() {
int x = , ff = ;
char c = gc;
while(c < '' || c > '') {if(c == '-') ff = -; c = gc;}
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x * ff;
} const int N = ; int f[N][N][], sum[N][N], n, m, k, A[N][N]; int main() {
n = read(), m = read(), k = read();
for(int i = ; i <= n; i ++) for(int j = ; j <= m; j ++) A[i][j] = read();
if(m == ) {
for(int i = ; i <= n; i ++) sum[i][] = sum[i - ][] + A[i][];
for(int i = ; i <= n; i ++)
for(int j = ; j <= k; j ++) {
f[i][j][] = f[i - ][j][];
for(int s = ; s <= i; s ++) f[i][j][] = std:: max(f[i][j][], f[s - ][j - ][] + sum[i][] - sum[s - ][]);
}
std:: cout << f[n][k][];
} else {
for(int i = ; i <= n; i ++) sum[i][] = sum[i - ][] + A[i][];
for(int i = ; i <= n; i ++) sum[i][] = sum[i - ][] + A[i][];
for(int i = ; i <= n; i ++)
for(int j = ; j <= n; j ++)
for(int use = ; use <= k; use ++) {
f[i][j][use] = std:: max(f[i - ][j][use], f[i][j - ][use]);
for(int s = ; s <= i; s ++) f[i][j][use] = std:: max(f[i][j][use], f[s - ][j][use - ] + (sum[i][] - sum[s - ][]));
for(int s = ; s <= j; s ++) f[i][j][use] = std:: max(f[i][j][use], f[i][s - ][use - ] + (sum[j][] - sum[s - ][]));
if(i == j)
for(int s = ; s <= i; s ++)
f[i][j][use] = std:: max(f[i][j][use], f[s - ][s - ][use - ] + (sum[i][] - sum[s - ][]) + (sum[i][] - sum[s - ][]));
}
std:: cout << f[n][n][k];
}
return ;
}

luogu 2331的更多相关文章

  1. [Luogu 2331] [SCOI2005]最大子矩阵

    [Luogu 2331] [SCOI2005]最大子矩阵 题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 ...

  2. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  3. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

  4. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

  5. [luogu P2647] 最大收益(贪心+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...

  6. bzoj 2331: [SCOI2011]地板 插头DP

    2331: [SCOI2011]地板 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 541  Solved: 239[Submit][Status] D ...

  7. Luogu 考前模拟Round. 1

    A.情书 题目:http://www.luogu.org/problem/show?pid=2264 赛中:sb题,直接暴力匹配就行了,注意一下读入和最后一句话的分句 赛后:卧槽 怎么只有40 B.小 ...

  8. luogu P2580 于是他错误的点名开始了

    luogu  P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...

  9. CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)

    CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...

随机推荐

  1. TIM—基本定时器代码

    使用目的:使用TIM定时器让小灯每0.5秒翻转一次亮灭 编程过程: 1-配置时基初始化结构体 2-开启定时器更新中断(即定时时间到了) 3-配置中断优先级 4-使能定时器 5-编写中断服务函数 6-编 ...

  2. docker 实践三:操作容器

    在学习了 docker 镜像的内容后,我们在来看 docker 的另一个核心点:容器. 注:环境为 CentOS7,docker 19.03 docker 的容器是镜像的一个运行实例.docker 镜 ...

  3. MySQL explain功能展示的各种信息的解释

    1.id: MySQL Query Optimizer 选定的执行计划中查询的序列号. 2.select_type: 所使用的查询类型,主要有以下这几种查询类型.  DEPENDENT SUBQUER ...

  4. 2019杭电多校一 K. Function (数论)

    大意: 给定$n(n\le 10^{21})$, 求$\sum\limits_{i=1}^n gcd(\lfloor\sqrt[3]{i}\rfloor,i)\mod 998244353$ 首先立方根 ...

  5. rman备份跳过read only数据文件,减少备份总量,加快备份时间

    客户需求,RMAN备份时间过长,想缩短备份时间,优化备份. 客户基于表空间进行历史数据归档的方式,将历史的表空间进行read only,想让RMAN跳过只读表空间,减少RMAN备份的数据总量,从而缩短 ...

  6. FPGA上外挂DDR2&DDR3&MIG IP的使用记录

    前言 当需要大容量数据存储及处理的时候,FPGA内部自带的存储资源是远远不够的,所以问题来了,怎么使用外带的DDR3? 首要问题在于DDR3是什么?有没有协议?当然只是需要用Xilinx MIG IP ...

  7. zabbix-设置邮箱预警

    设置预警系统 机器是被监控上了,但是出了问题怎么通知呢?之前学过监控软件的都知道可以使用报警机制啊,如果监控平台zabbix server发现某个机器异常了,可以给运维管理员发邮件啊,通过邮件通知管理 ...

  8. Oracle创建上下文 SYS_CONTEXT

    Oracle创建上下文 SYS_CONTEXT 1. 系统默认的一些参数 set heading offselect SYS_CONTEXT('USERENV', 'TERMINAL') termin ...

  9. Computer Vision_33_SIFT:Object recognition from local scale-invariant features——1999

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  10. JDK8 dockerfile

    # AlpineLinux with a glibc-2.28-r0 and Oracle Java 8FROM hub.devops.docker.com/library/alpine-glibc: ...