Description

  这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵
不能相互重叠。

Input

  第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的
分值的绝对值不超过32767)。

Output

  只有一行为k个子矩阵分值之和最大为多少。

题解:
  看了半天,突然发现,m小于等于2啊。
  然后就乱dp一波,除了转移写起来很麻之外,就没什么了。
  令f[i][j][k]表示当前第i行,以选中j个矩阵,当前行的取法为k的得分数,(取法只有5种啦)。
代码:
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
#define MN 105
#define inf 0x7f
int n,m,k,a[MN][],ans;
int f[MN][][];
void rw(int &x,int y){if(y>x)x=y;}
int main(){
n=read(),m=read(),k=read();
register int i,j;
for(i=;i<=n;i++)for(j=;j<=m;j++) a[i][j]=read();
if(m==){
for(i=;i<=n;i++) for(j=;j<=k;j++){
rw(f[i][j][],f[i-][j][]);
rw(f[i][j][],f[i-][j][]);
rw(f[i][j][],f[i-][j][]+a[i][]);
rw(f[i][j][],f[i-][j-][]+a[i][]);
}
printf("%d\n",max(f[n][k][],f[n][k][]));
}
else{
memset(f,-inf,sizeof f);
for(i=;i<=n;i++)for(j=;j<=k;j++) f[i][j][]=;
for(i=;i<=n;i++)for(j=;j<=k;j++){
for(int h=;h<=;h++) rw(f[i][j][],f[i-][j][h]); f[i][j][]=max(f[i-][j][],f[i-][j][])+a[i][];
f[i][j][]=max(f[i-][j][],f[i-][j][])+a[i][];
rw(f[i][j][],f[i-][j-][]+a[i][]);
rw(f[i][j][],f[i-][j-][]+a[i][]);
rw(f[i][j][],max(f[i-][j-][],f[i-][j-][])+a[i][]);
rw(f[i][j][],max(f[i-][j-][],f[i-][j-][])+a[i][]); f[i][j][]=max(f[i-][j-][],f[i-][j][])+a[i][]+a[i][];
rw(f[i][j][],max(f[i-][j-][],f[i-][j-][])+a[i][]+a[i][]);
rw(f[i][j][],f[i-][j-][]+a[i][]+a[i][]); f[i][j][]=f[i-][j][]+a[i][]+a[i][];
rw(f[i][j][],max(f[i-][j-][],f[i-][j-][])+a[i][]+a[i][]);
if(j>=) rw(f[i][j][],max(f[i-][j-][],f[i-][j-][])+a[i][]+a[i][]);
}
ans=-1e12;
for(i=;i<=;i++) rw(ans,f[n][k][i]);
printf("%d\n",ans);
}
return ;
}

来自PaperCloud的博客,未经允许,请勿转载,TKS!

[SCOI2005][BZOJ 1084]最大子矩阵的更多相关文章

  1. BZOJ 1084 最大子矩阵

    http://www.lydsy.com/JudgeOnline/problem.php?id=1084 思路:分m=1和m=2操作 #include<algorithm> #includ ...

  2. BZOJ 1084 最大子矩阵 dp

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1084 题目大意: 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分 ...

  3. 【SCOI2005】 最大子矩阵 BZOJ 1084

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

  4. [BZOJ 1084] [SCOI2005] 最大子矩阵 【DP】

    题目链接:BZOJ - 1084 题目分析 我看的是神犇BLADEVIL的题解. 1)对于 m = 1 的情况, 首先可能不取 Map[i][1],先 f[i][k] = f[i - 1][k];   ...

  5. BZOJ 1084: [SCOI2005]最大子矩阵 DP

    1084: [SCOI2005]最大子矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n* ...

  6. 【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)

    1084: [SCOI2005]最大子矩阵 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第 ...

  7. 【BZOJ 1084】 [SCOI2005]最大子矩阵(DP)

    题链 http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩 ...

  8. BZOJ 1084 [SCOI2005]最大子矩阵 - 动态规划

    传送门 题目大意: 从矩阵中取出k个互不重叠的子矩阵,求最大的和. 题目分析: 对于m=1,直接最大m子段和. 对于m=2: \(dp[i][j][k]\)表示扫描到第一列i和第2列j时选取了k个矩阵 ...

  9. BZOJ: 1084: [SCOI2005]最大子矩阵

    NICE 的DP 题,明白了题解真是不错. Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1228  Solved: 622[Submit][Stat ...

随机推荐

  1. HTTP协议复习三--TCP/IP的网络分层模型和OSI 网络分层模型

    TCP/IP网络分层模型 第一层叫“链接层”(link layer),负责在以太网.WiFi这样的底层网络上发送原始数据包,工 作在网卡这个层次,使用MAC地址来标记网络上的设备,所以有时候也叫MAC ...

  2. https小结

    目录: 1.什么是https 2.https实现过程描述(https和证书小结) 3.(在客户端)https抓包解密 4.wireshark分析https数据包解密前后的特点 正文 1.什么是http ...

  3. Python学习日记(二十五) 接口类、抽象类、多态

    接口类 继承有两种用途:继承基类的方法,并且做出自己的改变或扩展(代码重用)和声明某个子类兼容于某基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子 ...

  4. net 与或非

    && op1 && op2 当op1和op2都是true时,返回true :如果op1的值是false,则不运算右边的操作数 || op1 || op2 当op1和op ...

  5. 计算机网络原理,TCP&UDP

    UDP伪首部:计算校验和时会用到,然后实际传输过程中里包含的IP地址没有什么用. UDP校验和计算:求数值之和,如果溢出回卷,最后求出反码;UDP伪首部,UDP首部,应用层数据相加 tcp报文,最短2 ...

  6. Python 网络爬虫的常用库汇总

    爬虫的编程语言有不少,但 Python 绝对是其中的主流之一.下面就为大家介绍下 Python 在编写网络爬虫常常用到的一些库. 请求库:实现 HTTP 请求操作 urllib:一系列用于操作URL的 ...

  7. CPNtools 模拟工具适合分析什么样的协议

    最近梳理和CPNtools和Scyther之间的性能和差别.方便后面整理使用 1.库所的托肯值是什么? 托肯值也叫作令牌, 即网络系统中的资源,托肯的数目值代表了网络赋予的资源大小.在一个活的网络系统 ...

  8. go工程组织规范

    go编码以workspace形式管理,一个workspace包含所有的Go编码,包含多个版本控制仓库(例如使用git管理的多个仓库).每个仓库包含多个包package,每个package是一个单独的路 ...

  9. mysql 创建新用户 并赋予权限

    1.以管理员身份登录mysql mysql -u root -p 2.选择mysql数据库 use mysql 3.创建用户并设定密码 create user 'testuser'@'localhos ...

  10. IAR常用快捷键和使用小技巧

    1.复制和粘贴几行的部分代码 需求:有时候我们需要复制几行代码的后半部分,不需要复制前半部分.方法:按住Alt键,再用鼠标拖动就可以复制和粘贴后半部分 2.复制一行 复制一行的时候,我们一般是从最后开 ...