BZOJ 1084: [SCOI2005]最大子矩阵 DP
1084: [SCOI2005]最大子矩阵
题目连接:
http://www.lydsy.com/JudgeOnline/problem.php?id=1084
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
Hint
题意
题解:
首先我们注意m只有2
所以我们分开考虑即可,m=1的时候,dp[i][k]表示考虑第i个,分割了k块的最大值,然后无脑转移就好了
m=2的时候也是一样的,dp[i][j][k]表示上面考虑到第i个,下面考虑到了第j个,分割了k块
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int sum1[120];
int sum2[120];
int dp1[120][12];
int dp2[120][120][12];
void solve1()
{
for(int i=1;i<=n;i++)
{
int x;scanf("%d",&x);
sum1[i]=sum1[i-1]+x;
}
for(int i=1;i<=n;i++)
for(int j=0;j<i;j++)
for(int t=1;t<=k;t++)
{
dp1[i][t]=max(dp1[i][t],dp1[j][t-1]+sum1[i]-sum1[j]);
dp1[i][t]=max(dp1[i][t],dp1[j][t]);
}
printf("%d\n",dp1[n][k]);
}
void solve2()
{
for(int i=1;i<=n;i++)
{
int x,y;scanf("%d%d",&x,&y);
sum1[i]=sum1[i-1]+x;
sum2[i]=sum2[i-1]+y;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
{
for(int x=0;x<i;x++)
{
for(int t=1;t<=k;t++)
{
dp2[i][j][t]=max(dp2[i][j][t],dp2[x][x][t-1]+sum1[i]-sum1[x]+sum2[i]-sum2[x]);
dp2[i][j][t]=max(dp2[i][j][t],dp2[x][x][t]);
}
}
}
for(int i2=0;i2<i;i2++)
{
for(int t=1;t<=k;t++)
{
dp2[i][j][t]=max(dp2[i][j][t],dp2[i2][j][t-1]+sum1[i]-sum1[i2]);
dp2[i][j][t]=max(dp2[i][j][t],dp2[i2][j][t]);
}
}
for(int j2=0;j2<j;j2++)
{
for(int t=1;t<=k;t++)
{
dp2[i][j][t]=max(dp2[i][j][t],dp2[i][j2][t-1]+sum2[j]-sum2[j2]);
dp2[i][j][t]=max(dp2[i][j][t],dp2[i][j2][t]);
}
}
}
}
printf("%d\n",dp2[n][n][k]);
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
if(m==1)solve1();
if(m==2)solve2();
}
BZOJ 1084: [SCOI2005]最大子矩阵 DP的更多相关文章
- [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]最大子矩阵 - 动态规划
传送门 题目大意: 从矩阵中取出k个互不重叠的子矩阵,求最大的和. 题目分析: 对于m=1,直接最大m子段和. 对于m=2: \(dp[i][j][k]\)表示扫描到第一列i和第2列j时选取了k个矩阵 ...
- BZOJ: 1084: [SCOI2005]最大子矩阵
NICE 的DP 题,明白了题解真是不错. Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1228 Solved: 622[Submit][Stat ...
- 【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)
1084: [SCOI2005]最大子矩阵 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第 ...
- BZOJ(6) 1084: [SCOI2005]最大子矩阵
1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3566 Solved: 1785[Submit][Sta ...
- 1084: [SCOI2005]最大子矩阵
1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1325 Solved: 670[Submit][Stat ...
- Bzoj 1088: [SCOI2005]扫雷Mine (DP)
Bzoj 1088: [SCOI2005]扫雷Mine 怒写一发,算不上DP的游戏题 知道了前\(i-1\)项,第\(i\)项会被第二列的第\(i-1\)得知 设\(f[i]\)为第一列的第\(i\) ...
- 洛谷P2331 [SCOI2005]最大子矩阵 DP
P2331 [SCOI2005]最大子矩阵 题意 : 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 第一行为n,m,k(1≤n≤ ...
随机推荐
- hdu 2602 Bone Collector(01背包)
题意:给出包裹的大小v,然后给出n块骨头的价值value和体积volume,求出一路下来包裹可以携带骨头最大价值 思路:01背包 1.二维数组(不常用 #include<iostream> ...
- 【转】Linux mount/unmount命令
转自:http://www.cnblogs.com/xd502djj/p/3809375.html 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有:-a 安装在/etc/fs ...
- lua Date和Time
time和date两个函数在Lua中实现所有的时钟查询功能.函数time在没有参数时返回当前时钟的数值.(在许多系统中该数值是当前距离某个特定时间的秒数.)当为函数调用附加一个特殊的时间表时,该函数就 ...
- 浅谈jquery选择器
首先来说说jquery选择器的优势: 1.简洁的写法 2.支持css1.0到3.0选择器 3.完善的处理机制. 再来说说分类: jquery选择器分为基本选择器.层次选择器.属性选择器.基本过滤选择 ...
- 封装cookie.js、EventUtil.js、
最近学习了javascript,封装好的东西看起来舒服,以备需要的时候拉出来,jquery对javascript做了很好的封装!以后会多用jquery多些 var CookieUtil = { get ...
- 【转】 Linux Shell 命令--rename
重命名文件,经常用到mv命令,批量重命名文件rename是最好的选择,Linux的rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,判断方法:输入man rename 看到第 ...
- PYTHON压平嵌套列表
list 是 Python 中使用最频繁的数据类型, 标准库里面有丰富的函数可以使用.不过,如果把多维列表转换成一维列表(不知道这种需求多不多),还真不容易找到好用的函数,要知道Ruby.Mathem ...
- C# 必应代码搜索
微软宣布推出必应代码搜索服务,暂时只支持 C# 语言,日后将支持更多代码语言. Visual Studio 用户安装必应搜索插件之后可使用该服务来简化编程任务.Visual Studio 与 MSDN ...
- Strom学习笔记一
---恢复内容开始--- Storm 是个实时的.分布式以及具备高容错的计算系统.同Hadoop一样Storm也可以处理大批量的数据,然而Storm在保证高可靠性的前提下还可以让处理进行的更加实时:也 ...
- Flex SDK包内文件夹内容说明
打开SDK目录,让我们看看SDK中都包含了哪些内容: ant包含Flex对Ant的支持库,JAR和Java源码都有,方便我们基于Ant完成对项目的构建 asdoc基于ASDOC我们可以很方便的生成代码 ...