1084. [SCOI2005]最大子矩阵【网格DP】
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
1 -3
2 3
-2 3
Sample Output
9
果然DP还是需要多练……
f[i][j][p]保存当第i行为p状态时选了j个正方形的最大值
p=1这一行只选左边
p=2这一行只选右边
p=3这一行选两个(但两个为独立的)
p=4这一行选两个(两个并在一起)
#include<iostream>
#include<cstring>
using namespace std; int max5(int a,int b,int c,int d,int e)
{
return max(max(a,b),max(max(c,d),e));
}
int max3(int a,int b,int c)
{
return max(max(a,b),c);
}
int f[][][],n,m,k,x,y,z;
int main()
{
cin>>n>>m>>k;
if (m==)
{
for (int i=;i<=n;++i)
{
cin>>x;
for (int j=;j<=k;++j)
{
f[i][j][]=max(f[i-][j][],f[i-][j][]);
f[i][j][]=max(f[i-][j][],f[i-][j-][])+x;
}
}
cout<<max(f[n][k][],f[n][k][]);
}
else
{
memset(f,-0x3f,sizeof(f));
for(int i=;i<=n;i++)
for(int j=;j<=k;j++)
f[i][j][]=;
for (int i=;i<=n;++i)
{
cin>>x>>y;
z=x+y;
for (int j=;j<=k;++j)
{
f[i][j][]=max5(f[i-][j][],f[i-][j][],f[i-][j][],f[i-][j][],f[i-][j][]);
f[i][j][]=max5(f[i-][j-][]+x,f[i-][j][]+x,f[i-][j-][]+x,f[i-][j][]+x,f[i-][j-][]+x);
f[i][j][]=max5(f[i-][j-][]+y,f[i-][j-][]+y,f[i-][j][]+y,f[i-][j][]+y,f[i-][j-][]+y);
f[i][j][]=max3(f[i-][j-][]+z,f[i-][j-][]+z,f[i-][j][]+z);
if (j>=)f[i][j][]=max3(f[i][j][],f[i-][j-][]+z,f[i-][j-][]+z);
f[i][j][]=max5(f[i-][j-][]+z,f[i-][j-][]+z,f[i-][j-][]+z,f[i-][j-][]+z,f[i-][j][]+z); }
}
cout<<max5(f[n][k][],f[n][k][],f[n][k][],f[n][k][],f[n][k][]);
}
}
1084. [SCOI2005]最大子矩阵【网格DP】的更多相关文章
- 【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)
1084: [SCOI2005]最大子矩阵 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第 ...
- 【BZOJ】1084: [SCOI2005]最大子矩阵(DP)
http://www.lydsy.com/JudgeOnline/problem.php?id=1084 有一个1A--- 本题没看懂,,不会啊囧..感觉完全设不了状态..看了题解,囧,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】
分情况讨论,m=1的时候比较简单,设f[i][j]为到i选了j个矩形,前缀和转移一下就行了 m=2,设f[i][j][k]为1行前i个,2行前j个,一共选了k个,i!=j的时候各自转移同m=1,否则转 ...
- BZOJ 1084: [SCOI2005]最大子矩阵 DP
1084: [SCOI2005]最大子矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n* ...
- 1084: [SCOI2005]最大子矩阵
1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1325 Solved: 670[Submit][Stat ...
- BZOJ(6) 1084: [SCOI2005]最大子矩阵
1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3566 Solved: 1785[Submit][Sta ...
- 【BZOJ 1084】 [SCOI2005]最大子矩阵(DP)
题链 http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩 ...
- [bzoj1084][SCOI2005]最大子矩阵(DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1084 分析: m=1时:相当于只有一行数,让你取出p段,使得总和最大 明显可以DP,f ...
随机推荐
- ADO五大对象(转载)
来源:http://blog.csdn.net/u013201439/article/details/51111969 ADO五大对象(转载) 一.绪论 1.引言 在数据库应用系统中,必定要涉及到对数 ...
- 【转】Java线程详解
Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...
- win8.1 pro-64位下安装配置MinGW—64位
1.下载MinGW-w64位:http://mingw-w64.org/doku.php 点击Downloads 说明:这边使用的是在线安装方式: 在网站里可以看到他安装后的文件夹: 2.安装 运行m ...
- 12:计算2的N次方
12:计算2的N次方 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 任意给定一个正整数N(N<=100),计算2的n次方的值. 输入 输入一个正整数N ...
- HTTPS 常见部署问题及解决方案
在最近几年里,我写了很多有关 HTTPS 和 HTTP/2 的文章,涵盖了证书申请.Nginx 编译及配置.性能优化等方方面面.在这些文章的评论中,不少读者提出了各种各样的问题,我的邮箱也经常收到类似 ...
- js面向对象设计之class中一些坑和技巧
this的指向 super 类工厂,类中定义方法名时,可以使用字符串,这就可以创建工厂函数(类似模板类) Generator 函数 静态属性和私有属性.私有方法 new.target
- Android开发问题积累 <加载在线Gif><WebView无法加载网页图片>
在线Gif加载 解决办法 Glide完美解决 Glide.with(context).load(pic).placeholder(R.drawable.loading).into(imageView) ...
- Teamviewer 手机端怎么拖动窗口,选中文字
Teamviewer 手机端怎么拖动窗口,选中文字 Teamviewer 手机端拖动窗口,选中文字和触摸板的使用方式是一样的 点两下不松开就可以拖动 点两下不松开也可以选中文字 Teamviewer ...
- String 类型
一.不可变 一个 String 类型的值是不可以改变的,比如,String china = "中国",“中国”这个字符串从它创建开始直到销毁都是不可改变的. 二.字符串常量池 字面 ...
- java基础(三) 加强型for循环与Iterator
引言 从JDK1.5起,增加了加强型的for循环语法,也被称为 "for-Each 循环".加强型循环在操作数组与集合方面增加了很大的方便性.那么,加强型for循环是怎么解析的 ...