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=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}return x*f;
}
#define MN 105
#define inf 0x7f
int n,m,k,a[MN][3],ans;
int f[MN][15][6];
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=1;i<=n;i++)for(j=1;j<=m;j++) a[i][j]=read();if(m==1){for(i=1;i<=n;i++) for(j=1;j<=k;j++){rw(f[i][j][0],f[i-1][j][0]);rw(f[i][j][0],f[i-1][j][1]);rw(f[i][j][1],f[i-1][j][1]+a[i][1]);rw(f[i][j][1],f[i-1][j-1][0]+a[i][1]);}printf("%d\n",max(f[n][k][1],f[n][k][0]));}else{memset(f,-inf,sizeof f);for(i=0;i<=n;i++)for(j=0;j<=k;j++) f[i][j][1]=0;for(i=1;i<=n;i++)for(j=1;j<=k;j++){for(int h=1;h<=5;h++) rw(f[i][j][1],f[i-1][j][h]);f[i][j][2]=max(f[i-1][j][2],f[i-1][j][5])+a[i][1];f[i][j][3]=max(f[i-1][j][3],f[i-1][j][5])+a[i][2];rw(f[i][j][2],f[i-1][j-1][4]+a[i][1]);rw(f[i][j][3],f[i-1][j-1][4]+a[i][2]);rw(f[i][j][2],max(f[i-1][j-1][1],f[i-1][j-1][3])+a[i][1]);rw(f[i][j][3],max(f[i-1][j-1][1],f[i-1][j-1][2])+a[i][2]);f[i][j][4]=max(f[i-1][j-1][1],f[i-1][j][4])+a[i][1]+a[i][2];rw(f[i][j][4],max(f[i-1][j-1][2],f[i-1][j-1][3])+a[i][1]+a[i][2]);rw(f[i][j][4],f[i-1][j-1][5]+a[i][1]+a[i][2]);f[i][j][5]=f[i-1][j][5]+a[i][1]+a[i][2];rw(f[i][j][5],max(f[i-1][j-1][2],f[i-1][j-1][3])+a[i][1]+a[i][2]);if(j>=2) rw(f[i][j][5],max(f[i-1][j-2][1],f[i-1][j-2][4])+a[i][1]+a[i][2]);}ans=-1e12;for(i=1;i<=5;i++) rw(ans,f[n][k][i]);printf("%d\n",ans);}return 0;
}


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

转载于:https://www.cnblogs.com/PaperCloud/p/9040483.html

[SCOI2005][BZOJ 1084]最大子矩阵相关推荐

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

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MB Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得 ...

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

    1084 思路: dp[i][j][k]:第一列选前i个第二列选前j个总共选了k个子矩阵的最大值 注意空矩阵也算子矩阵 代码: #pragma GCC optimize(2) #pragma GCC ...

  3. [BZOJ] 1084 [SCOI2005]最大子矩阵

    Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3540 Solved: 1771 [Submit][Status][Discuss] Descript ...

  4. bzoj 1084 DP

    首先对于m==1的情况非常容易处理(其实这儿因为边界我错了好久...),直接DP就好了,设f[i][k]为这个矩阵前i个选k个矩阵的最大和,那么f[i][k]=max(f[j][k-1]+sum[j+ ...

  5. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  6. 1084. [SCOI2005]最大子矩阵【网格DP】

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

  7. BZOJ 1087: [SCOI2005]互不侵犯King

    二次联通门 : BZOJ 1087: [SCOI2005]互不侵犯King /*BZOJ 1087: [SCOI2005]互不侵犯King状压dp将每一行棋子的存在状态压成一个整数f[i][j][k] ...

  8. 【BZOJ】【1086】 【SCOI2005】王室联邦

    树分块 orz vfk && PoPoQQQ http://vfleaking.blog.163.com/blog/static/174807634201231684436977/ h ...

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

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

最新文章

  1. 证明实对称正定矩阵A的Gauss-Seidel法必定收敛(完整过程)
  2. 天然气表怎么看多少方_宝宝奶粉的的营养成分表,到底怎么看?
  3. Python获取环境变量值
  4. php垃圾回收算法分代,PHP的垃圾回收机制代码实例讲解
  5. [LeetCode] Remove Element 分析
  6. spring boot项目Intellij 打包
  7. 2019计算机调剂困难,2019年研究生调剂困难程度远超想象
  8. 学习python内一般函数知识
  9. DSkin学习之DSkin.Forms
  10. page cache和buffer cache之间的关系以及验证
  11. 这世界没有能够预测未来的魔法水晶球
  12. 编程c语言黑与白,C语言黑与白问题代码及解析
  13. 2020年国内外值得关注的15家PaaS平台与SaaS厂商!
  14. Linux扩容swap分区
  15. 详解 yolo配置文件各参数的含义
  16. 前端学习从入门到高级全程记录之8 (PS基本使用综合案例)
  17. Python startswith endswith
  18. 【latex】表格添加注脚;对表格的内容进行注释
  19. p51 thinkpad 拆解_ThinkPad P51硬盘更换指南(图解)
  20. Overleaf LaTex 学习(一):页边距设置与matlab代码

热门文章

  1. 简单解决 WIN10更新后 远程桌面提示 CredSSP加密Oracle修正的问题
  2. 进程和线程的定义、区别与联系
  3. P1160 队列安排 洛谷
  4. 【从理论到代码】旋转矩阵与欧拉角 一
  5. strcpy的用法、c语言实现、及注意点
  6. oracle应用程序开发,关于Oracle 数据库应用程序开发问题
  7. python随机森林库_随机森林库:R和Python中的不同结果
  8. asp网上书店的代码_使用Helm将ASP.NET Core应用程序部署到Kubernetes容器集群
  9. gc android,Android GC Log解读
  10. group python 读hdf5_Python处理Excel模块的对比分析