【BZOJ 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
3 2 2
1 -3
2 3
-2 3
Sample Output
9
题解
注意到m<=2,那么可以分类讨论:
(1)当m1时,设d1 [ i ] [k]为从考虑前i行找到k个子矩阵,转移方程为
$ d1[i][k] = max ( d1[i][k] , d1[j][k-1] + sum[i] - sum[j] ) $
(2)当m2时,设d2 [ i ] [ j ] [ k ] 从考虑第一列前i行,第二列前j行找到k个子矩阵,转移方程为
$ d2[i][j][k]=max(d2[i][j][k],d2[x][j][k-1]+s1[i]-s1[x]);$
$ d2[i][j][k]=max(d2[i][j][k],d2[i][x][k-1]+s2[j]-s2[x]);$
$ d2[i][j][k]=max(d2[i][j][k],d2[x][x][k-1]+s1[i]-s1[x]+s2[j]-s2[x]);$
参考代码
#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define ll long long
#define inf 1000000000
#define mod 1000000007
using namespace std;
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*10+ch-'0';ch=getchar();}
return x*f;
}
void Out(ll a) {
if(a<0) putchar('-'),a=-a;
if(a>=10) Out(a/10);
putchar(a%10+'0');
}
const int N=105;
int d1[N][15],d2[N][N][15];
int sum[N];
int s1[N],s2[N];
int main(){
int n=read(),m=read(),K=read();
if(m==1){
for(int i=1;i<=n;i++){
int x=read();
sum[i]=sum[i-1]+x;
}
for(int i=1;i<=n;i++) for(int k=1;k<=K;k++){
d1[i][k]=d1[i-1][k];
for(int j=i-1;j>=0;j--)
d1[i][k]=max(d1[i][k],d1[j][k-1]+sum[i]-sum[j]);
}
Out(d1[n][K]);
}
else{
for(int i=1;i<=n;i++){
int x=read(),y=read();
s1[i]=s1[i-1]+x;
s2[i]=s2[i-1]+y;
}
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=K;k++){
d2[i][j][k]=max(d2[i-1][j][k],d2[i][j-1][k]);
for(int x=0;x<i;x++) d2[i][j][k]=max(d2[i][j][k],d2[x][j][k-1]+s1[i]-s1[x]);
for(int x=0;x<j;x++) d2[i][j][k]=max(d2[i][j][k],d2[i][x][k-1]+s2[j]-s2[x]);
if(i==j) for(int x=0;x<i;x++)
d2[i][j][k]=max(d2[i][j][k],d2[x][x][k-1]+s1[i]-s1[x]+s2[j]-s2[x]);
}
Out(d2[n][n][K]);
}
return 0;
}
【BZOJ 1084】 [SCOI2005]最大子矩阵(DP)的更多相关文章
- BZOJ 1084: [SCOI2005]最大子矩阵 DP
1084: [SCOI2005]最大子矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n* ...
- [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≤ ...
随机推荐
- Django Views and URLconfs
碧玉妆成一树高,万条垂下绿丝绦. 不知细叶谁裁出,二月春风似剪刀. 原文尽在:http://djangobook.com/ 转载请注明出处:http://www.cnblogs.com/A-FM/p/ ...
- yii2 checkbox 的使用实例
使用的是Yii自带的Grid,在使用checkbox希望可以把选中行的id值传到我想要的页面. 首先需要改变key值 $dataProvider->key = 'ID'; button: Htm ...
- 01.第一章_C++ Primer学习笔记_开始
1.2 初始输入输出 iostream库里面包含两个基础类型istream和ostream,分别表示输入流和输出流,一个流就是一个字符序列,从IO设备读出或者写入IO设备. 标准的输入输出对象 标准库 ...
- RabbitMQ十:重要方法简述(参数)
主要方法 前言 经过前面的学习,RabbitMQ 已经拙见有一定认识和了解,今天主要针对我们在前面学习方法进行一次小总结,本篇文章也想在开头写的,但是后来考虑,如果我都把方法都一一列举,我想大家都没很 ...
- laravel oauth2.0 文件上传报错
报错信息: "message": "Invalid stream or file provided for UploadedFile", " ...
- Windows API函数大全二
4. API之打印函数 AbortDoc 取消一份文档的打印 AbortPrinter 删除与一台打印机关联在一起的缓冲文件 AddForm 为打印机的表单列表添加一个新表单 AddJob 用于获取一 ...
- 自動獲取外網IP并發郵件
問題: 公司有一Web系統需開放給香港Office公司查詢資料,但最近動態域名需實名認證, 因系統較小型,非公開大範圍使用,所以再認證一域名也沒多大必要, 所以想定時生成一封能查詢外網IP的郵件發送給 ...
- 2. UITest相关APIs
1. XCUIApplication 这是你正在测试的应用的代理.它能让你启动应用,这样你就能执行测试了.它每次都会新起一个进程,这会多花一些时间,但是能保证测试应用时的状态是干净的,这样你需要处理的 ...
- Android利用融云做异地登录提醒
在RongCloudEvent下找到onChanged方法 @Override public void onChanged(ConnectionStatus connectionStatus) { s ...
- vb6如何调用delphi DLL中的函数并返回字符串?
1,问题描述 最近发现vb6调用delphi DLL中的函数并返回字符串时出现问题,有时正常,有时出现?号,有时干脆导致VB程序退出 -- :: 将金额数字转化为可读的语音文字:1转化为1元 ???? ...