BZOJ: 1084: [SCOI2005]最大子矩阵
NICE 的DP 题,明白了题解真是不错。
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1228 Solved: 622
[Submit][Status]
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
HINT
思路:M<=2;
先是M==1的情况 这个是满满的三维。DP[I][J】表示做的第几个,现在做到J个数了。转移也比较简单。
M==2时,
我们要加一维。
具体是这样:F[I][J][K] 表示做第I个 J 表示上面做到第几,K表示下面做到第几。
转移方程:具体见代码。
#include<bits/stdc++.h>
using namespace std;
#define N 123
int s[N];
int s1[N];
int s2[N];
int a[N];
int dp[N][N];
int f[N][N][N];
int main()
{
int n;
int k;
int m;
scanf("%d%d%d",&n,&m,&k);
if (m==){
for (int i=;i<=n;i++) {
scanf("%d",&a[i]);
s[i]=s[i-]+a[i];
}
for (int i=;i<=k;i++)
for (int j=;j<=n;j++)
{
dp[i][j]=dp[i][j-];
for (int p=;p<j;p++)
dp[i][j]=max(dp[i][j],dp[i-][p]+s[j]-s[p]);
}
printf("%d\n",dp[k][n]);
}
else
{
for (int i=;i<=n;i++)
{
int x1,x2;
scanf("%d%d",&x1,&x2);
s1[i]+=s1[i-]+x1;
s2[i]+=s2[i-]+x2;
} for (int i=;i<=k;i++)
for (int j=;j<=n;j++)
for (int p=;p<=n;p++)
{
f[i][j][p]=max(f[i][j-][p],f[i][j][p-]);
for (int l=;l<j;l++)
f[i][j][p]=max(f[i][j][p],f[i-][l][p]+s1[j]-s1[l]); for (int l=;l<p;l++)
f[i][j][p]=max(f[i][j][p],f[i-][j][l]+s2[p]-s2[l]); if (j==p)
{
for (int l=;l<j;l++)
f[i][j][p]=max(f[i][j][p],f[i-][l][l]+s2[p]-s2[l]+s1[p]-s1[l]);
}
} printf("%d\n",f[k][n][n]);
}
return ;
}
BZOJ: 1084: [SCOI2005]最大子矩阵的更多相关文章
- 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]最大子矩阵 - 动态规划
传送门 题目大意: 从矩阵中取出k个互不重叠的子矩阵,求最大的和. 题目分析: 对于m=1,直接最大m子段和. 对于m=2: \(dp[i][j][k]\)表示扫描到第一列i和第2列j时选取了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】 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】1084: [SCOI2005]最大子矩阵(DP)
http://www.lydsy.com/JudgeOnline/problem.php?id=1084 有一个1A--- 本题没看懂,,不会啊囧..感觉完全设不了状态..看了题解,囧,m<=2 ...
- 1084: [SCOI2005]最大子矩阵 - BZOJ
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
随机推荐
- AsyncTask的简单使用
package com.zzw.life; import android.app.Activity; import android.os.AsyncTask; import android.os.Bu ...
- Windows7不能打开telnet功能
在dos窗口中输入telnet命令提示如下: 解决方法是打开控制面板中的程序和功能,选择打开或关闭Window是功能,如下: 勾选上面的Telnet客户端,然后确定,出现下图.稍等片刻重新打开命令行, ...
- PHP 只有登陆后才能浏览的简单实现
1.============================================================= 在你不想让别人直接进入的网页开头加一段代码: session_start ...
- poj 2887 Big String
题目连接 http://poj.org/problem?id=2887 Big String Description You are given a string and supposed to do ...
- 九度oj 1528 最长回文子串
原题链接:http://ac.jobdu.com/problem.php?pid=1528 小白书上的做法,不过这个还要简单些... #include<algorithm> #includ ...
- Python: 函数参数小结
参数的类型: 函数的参数有2种类型: 1. 函数定义时用于接收值的形式参数Parameters. 2. 函数调用时用于传递值的实际参数Arguments. 参数的传递: 传递方式有2种: 1. 值传递 ...
- LoadRunner - 当DiscuzNT遇上了Loadrunner(中) (转发)
当DiscuzNT遇上了Loadrunner(中) 在上文中,介绍了如果录制脚本和设置脚本执行次数.如果经过调试脚本能够正常工作的话,就可以设置并发用户数并进行压力测试了. 首先我们通过脚本编辑界面上 ...
- EasyUI 兼容 IE6 方法总结
1.combobox 如果单选,multiple必须也设置为true.这个ie7如果没设置,会保持多选状态,算是一个bug. 2.combobox 最好用js来渲染,而不是一开始就class=“eas ...
- ASCII Table
ASCII Table ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUT 32 (space) 64 @ 96 . 1 SOH 33 ! 65 ...
- Java Day 07
构造函数 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:给对象初始化值 默认构造函数 如果没有自己定义构造函数,系统会自动生成: 如果定义了,则默认构造函数不会自动生成. 构造函数与一 ...