BZOJ 1084 (SCOI 2005) 最大子矩阵
1084: [SCOI2005]最大子矩阵
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 3560 Solved: 1779
[Submit][Status][Discuss]
Description
这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵
不能相互重叠。
Input
第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的
分值的绝对值不超过32767)。
Output
只有一行为k个子矩阵分值之和最大为多少。
Sample Input
3 2 2
1 -3
2 3
-2 3
Sample Output
9
—————————————————————————————
题解
看着m<=2。。。
好好的前缀和dp就被我写成毒瘤dp+数据分治了。。
当m=1时,dp[i][j][0/1] 表示前i行选了j个矩形当前选或不选,比较好转移。
当m=2时
设dp[i][j][0/1/2/3/4] 表示前i行选了j个矩形。
1代表当前行只选左边,2代表只选左边,0代表都不选,3代表都选但分别是两个矩形中,4代表都选且
在一个矩形中。然后就是一波瞎搞了。。。
代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 105;
int f[MAXN][15][5],n,m,k,a[MAXN][4];
int main(){
scanf("%d%d%d",&n,&m,&k);
if(m==1){
for(int i=1;i<=n;i++){
scanf("%d",&a[i][1]);
for(int j=1;j<=k;j++){
f[i][j][1]=max(f[i-1][j][1],f[i-1][j-1][0])+a[i][1];
f[i][j][0]=max(f[i-1][j][1],f[i-1][j][0]);
}
}
printf("%d",max(f[n][k][0],f[n][k][1]));
}
else{
memset(f,-0x3f,sizeof(f));
for(int i=0;i<=n;i++)
for(int j=0;j<=k;j++)
f[i][j][0]=0;
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i][1],&a[i][2]);
for(int j=1;j<=k;j++){
f[i][j][0]=max( max(f[i-1][j][0],f[i-1][j][1]), max(f[i-1][j][2],f[i-1][j][3]));
f[i][j][0]=max(f[i][j][0],f[i-1][j][4]);
f[i][j][1]=max( max(f[i-1][j-1][0],f[i-1][j][1]), max(f[i-1][j-1][2],f[i-1][j][3]))+a[i][1];
f[i][j][1]=max(f[i][j][1], f[i-1][j-1][4]+a[i][1]);
f[i][j][2]=max( max(f[i-1][j-1][0],f[i-1][j-1][1]), max(f[i-1][j][2],f[i-1][j][3]))+a[i][2];
f[i][j][2]=max(f[i][j][2], f[i-1][j-1][4]+a[i][2]);
f[i][j][3]=max(f[i-1][j-1][1],max(f[i-1][j-1][2],f[i-1][j][3]))+a[i][1]+a[i][2];
if(j>=2) f[i][j][3]=max(f[i][j][3],f[i-1][j-2][4]+a[i][1]+a[i][2]);
f[i][j][4]=max( max(f[i-1][j-1][0],f[i-1][j-1][1]),max(f[i-1][j-1][2],f[i-1][j-1][3]))+a[i][1]+a[i][2];
f[i][j][4]=max(f[i][j][4],f[i-1][j][4]+a[i][1]+a[i][2]);
}
}
printf("%d",max( max( max(f[n][k][0],f[n][k][1]), max(f[n][k][2],f[n][k][3])),f[n][k][4]));
}
return 0;
}
BZOJ 1084 (SCOI 2005) 最大子矩阵的更多相关文章
- 【BZOJ 1084】 [SCOI2005]最大子矩阵(DP)
题链 http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩 ...
- [ SCOI 2005 ] 最大子矩阵
\(\\\) \(Description\) 给出一个\(N\times M\)的有权矩阵,选出其中\(K\)个互不重叠的子矩阵,使得这\(K\)个子矩阵的权值和最大. \(N\in [1,100]\ ...
- 【BZOJ 1084】[SCOI2005]最大子矩阵
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
- 【SCOI2005】 最大子矩阵 BZOJ 1084
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
- [BZOJ 1084] [SCOI2005] 最大子矩阵 【DP】
题目链接:BZOJ - 1084 题目分析 我看的是神犇BLADEVIL的题解. 1)对于 m = 1 的情况, 首先可能不取 Map[i][1],先 f[i][k] = f[i - 1][k]; ...
- BZOJ 1084: [SCOI2005]最大子矩阵 DP
1084: [SCOI2005]最大子矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n* ...
- 【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)
1084: [SCOI2005]最大子矩阵 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第 ...
- BZOJ 1084 最大子矩阵
http://www.lydsy.com/JudgeOnline/problem.php?id=1084 思路:分m=1和m=2操作 #include<algorithm> #includ ...
- BZOJ 1084 最大子矩阵 dp
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1084 题目大意: 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分 ...
随机推荐
- md详解和rd详解:一次性创建多个目录和多级子目录
md 命令: 官方解释: E:\ABC>md /? 创建目录. MKDIR [drive:]path MD [drive:]path 如果命令扩展被启用,MKDIR 会如下改变: 如果需要,MK ...
- 机器学习改善Interpretability的几个技术
改善机器学习可解释性的技术和方法 尽管透明性和道德问题对于现场的数据科学家来说可能是抽象的,但实际上,可以做一些实际的事情来提高算法的可解释性 算法概括 首先是提高概括性.这听起来很简单,但并非那么简 ...
- java两个栈实现一个队列&&两个队列实现一个栈
栈:先进后出 队列:先进先出 两个栈实现一个队列: 思路:先将数据存到第一个栈里,再将第一个栈里的元素全部出栈到第二个栈,第二个栈出栈,即可达到先进先出 源码: class Queue<E&g ...
- storm集群的安装
storm图解 storm的基本概念 Topologies:拓扑,也俗称一个任务 Spoults:拓扑的消息源 Bolts:拓扑的处理逻辑单元 tuple:消息元组,在Spoults和Bolts传递数 ...
- 2019NOIP算法复健+学习
前言: 原本因为kma太弱,很多算法没学学了也不会用,打算设置密码给自己看.后来想了想,觉得也没有必要,既然决定了要学些东西到脑子里,就没什么好丢人的. 注:"×"意为完全没学,& ...
- bash字符串前导美元符号的作用
problem bash内置变量IFS作为内部单词分隔符,其默认值为<space><tab><newline>, 我想设置它仅为\n,于是: OLD_IFS=$IF ...
- 牛客练习赛43D Tachibana Kanade Loves Sequence
题目链接:https://ac.nowcoder.com/acm/contest/548/D 题目大意 略 分析 贪心,首先小于等于 1 的数肯定不会被选到,因为选择一个数的代价是 1,必须选择大于1 ...
- Docker Api 实测
好久没写博客,工作中想着未来部门需要对docker进行维护相对麻烦,而且,网络上也缺少一些合适的项目,于是准备筹划自己动手.先找到了Docker 的API文档,地址是:https://docs.doc ...
- 极限学习机(Extreme Learning Machine)学习笔记
最近研究上了这个一个东西--极限学习机. 在很多问题中,我大多会碰到两个问题,一个是分类,另一个就是回归.简单来说,分类是给一串数打个标签,回归是把一串数变为一个数. 在这里我们需要处理的数据一般维度 ...
- IntelliJ IDEA(的springboot项目)环境准备(配置maven和jdk)
1.配置maven .使用自己电脑上装的maven版本,而非默认的.(方法一) (1)选择configure--Settings (2)搜索maven,配置3.6.2版本的maven.注意:将mave ...