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

3 2 2
1 -3
2 3
-2 3

Sample Output

9

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]最大子矩阵的更多相关文章

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

    1084: [SCOI2005]最大子矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n* ...

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

    题目链接:BZOJ - 1084 题目分析 我看的是神犇BLADEVIL的题解. 1)对于 m = 1 的情况, 首先可能不取 Map[i][1],先 f[i][k] = f[i - 1][k];   ...

  3. BZOJ 1084 [SCOI2005]最大子矩阵 - 动态规划

    传送门 题目大意: 从矩阵中取出k个互不重叠的子矩阵,求最大的和. 题目分析: 对于m=1,直接最大m子段和. 对于m=2: \(dp[i][j][k]\)表示扫描到第一列i和第2列j时选取了k个矩阵 ...

  4. 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,否则转 ...

  5. 【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)

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

  6. BZOJ(6) 1084: [SCOI2005]最大子矩阵

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3566  Solved: 1785[Submit][Sta ...

  7. 1084: [SCOI2005]最大子矩阵

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1325  Solved: 670[Submit][Stat ...

  8. 【BZOJ】1084: [SCOI2005]最大子矩阵(DP)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1084 有一个1A--- 本题没看懂,,不会啊囧..感觉完全设不了状态..看了题解,囧,m<=2 ...

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

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

随机推荐

  1. Java程序员要注意的10个问题————————好东西就是要拿来分享

    [本文来自优优码:http://www.uucode.net/201406/ten-issue-for-java],好东西就是要拿来分享 1. Array 转为 ArrayList 很多人会这么写: ...

  2. 8.css边框

    其实,与其将css盒模型称为是一个盒子,我更愿意将其称为卡片,或者是图画.因为相对于盒子的三维特效,网页的元素更像是二维的图画.而我们之间对元素尺寸之类的调整,更像是对画布的调整. 但是,就像我可以为 ...

  3. 3.html5的文本元素

    如果你看了第一篇的内容,你会发现我的代码是这样的: 文本 <span>文本</span> <scolia>文本</scolia> <scolia ...

  4. openSUSE13.1安装搜狗输入法 for Linux

    一句话总结:爽死我了!什么叫输入的快感终于体会到了,搜狗输入法,码农的好伙伴!!! 转自openSUSE论坛 女王陛下 https://forum.suse.org.cn/viewtopic.php? ...

  5. C扩展 从共享内存shm到memcache外部内存

    引言 - ipc - shm 共享内存 本文会通过案例了解ipc 的共享内存机制使用, 后面会讲解C 如何使用外部内存服务memcached. 好先开始了解 linux 共享内存机制. 推荐先参看下面 ...

  6. SQL基础学习篇--字符函数

    字符函数可与SELECT,UPDATE,DELETE RIGHT()----从右侧开始选择  SELECT RIGHT(列,字符数量) FROM 表 LEFT()----从左侧开始选择  SUBSTR ...

  7. ubuntu 安装cloudera hadoop

    参考:http://www.aboutyun.com/thread-8921-1-1.html auto wlan0iface wlan0 inet staticaddress 10.32.37.12 ...

  8. MVC4.0 WebApi如何设置api支持namespace

    1.自定义HttpControllerSelector /// <summary> /// 设置api支持namespace /// </summary> public cla ...

  9. 两个有用的shell工具总结

    shell工具之一:sed sed基础 sed编辑器被称作流编辑器,与常见的交互式文本编辑器刚好相反.文本编辑器可以通过键盘来交互式地插入.删除.替换文本中的数据:而流编辑器是基于一组预先的规则来编辑 ...

  10. Winform之ListView

    ListView表示 Windows 列表视图控件,该控件显示可用四种不同视图之一显示的项集合.