传送门

题目大意:

从矩阵中取出k个互不重叠的子矩阵,求最大的和。

题目分析:

对于m=1,直接最大m子段和。

对于m=2:

\(dp[i][j][k]\)表示扫描到第一列i和第2列j时选取了k个矩阵的答案。

有3中转移:第一列取一段,第二列取一段,两列一起取一个宽度为2的矩阵。

\[dp[i][j][k] = max(dp[i-1][j][k], dp[i][j-1][k], max\{dp[p][j][k-1]\} + s[1][i] - s[1][p], max\{dp[i][p][k-1]\} + s[2][i] - s[2][p], dp[p][p][k-1] + s[1][i] - s[1][p] + s[2][i] - s[2][p] (i == j时))
\]

code

#include<bits/stdc++.h>
using namespace std; const int N = 105;
int n, m, k, dp2[N][N][15], matrix[N][10], sum[5][N], dp1[N][15]; inline void solve2(){
memset(dp2, -0x3f3f3f3f, sizeof dp2);
for(int i = 0; i <= n; i++)
for(int j = 0; j <= n; j++)
dp2[i][j][0] = 0;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++){
for(int l = 1; l <= k; l++){
dp2[i][j][l] = max(dp2[i][j - 1][l], dp2[i - 1][j][l]);
for(int p = 0; p <= i - 1; p++)
dp2[i][j][l] = max(dp2[i][j][l], dp2[p][j][l - 1] + sum[1][i] - sum[1][p]);
for(int p = 0; p <= j - 1; p++)
dp2[i][j][l] = max(dp2[i][j][l], dp2[i][p][l - 1] + sum[2][j] - sum[2][p]);
if(i == j){
for(int p = 0; p <= i - 1; p++)
dp2[i][j][l] = max(dp2[i][j][l], dp2[p][p][l - 1] + sum[1][i] - sum[1][p] + sum[2][i] - sum[2][p]);
}
}
}
cout<<dp2[n][n][k];
} inline void solve1(){
memset(dp1, -0x3f3f3f3f, sizeof dp1);
for(int i = 0; i <= n; i++) dp1[i][0] = 0;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= k; j++){
dp1[i][j] = dp1[i - 1][j];
for(int p = 0; p <= i - 1; p++)
dp1[i][j] = max(dp1[i][j], dp1[p][j - 1] + sum[1][i] - sum[1][p]);
}
cout<<dp1[n][k]<<endl;
} int main(){
scanf("%d%d%d", &n, &m, &k);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++)
scanf("%d", &matrix[i][j]);
sum[1][i] = sum[1][i - 1] + matrix[i][1];
sum[2][i] = sum[2][i - 1] + matrix[i][2];
}
// for(int i = 1; i <= n; i++) cout<<sum[1][i]<<" "<<sum[2][i]<<endl;
if(m == 1) solve1();
else if(m == 2) solve2();
return 0;
}

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]最大子矩阵

    NICE 的DP 题,明白了题解真是不错. Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1228  Solved: 622[Submit][Stat ...

  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. SqlParameter的用法

    SqlParameter的用法 关于Sql注入的基本概念,相信不需多说,大家都清楚,经典的注入语句是' or 1=1--单引号而截断字符串,“or 1=1”的永真式的出现使得表的一些信息被暴露出来,如 ...

  2. 【组件】微信小程序input搜索框的实现

    开发小程序的过程,是一个学习知识,解决问题的过程,每当实现了一个需求,总会有很大的成就感,每天记录一个开发过程中的细节.实现效果如下: 官方参考链接:https://developers.weixin ...

  3. 【习题 6-9 UVA - 127】"Accordian" Patience

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 链表模拟即可. 1pile不能加s... [代码] #include <bits/stdc++.h> using nam ...

  4. SpringMVC-如何接收各种参数(普通参数,对象,JSON, URL)

    在交互的过程中,其中一个关键的节点就是获取到客户端发送过来的请求参数,本篇文章,我们来罗列下SpringMVC对于各种数据的获取方式: 说明:以下重点在讲解如何获取参数上,所以返回的数据不是重点 1, ...

  5. 【Codeforces Round #299 (Div. 2) B】Tavas and SaDDas

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每次取出最小的数字,在后面加上一个4或一个7就好; 会发现最后的数字很少的. [代码] #include <bits/stdc ...

  6. 【Redis】redis的安装、配置执行及Jedisclient的开发使用

    定义: Redis is an open source, BSD licensed, advanced key-value cache and store. It is often referred ...

  7. Android 调用系统邮件,发送邮件到指定邮箱

    在项目中,最后有一个联络我们,要求是点击号码还有邮箱地址能够发送邮件,这时候解决的方案其实有两种,一种是调用系统发邮件的软件,可以添加邮箱账号就可以发送邮件:第二种是使用javamail来发送邮件.在 ...

  8. eclipse编译器错误、警告设置

    颜色配置步骤:Window->Preferences->General->Editors->Text Editors->Annotations

  9. [Err] 1136 - Column count doesn&#39;t match value count at row 1

    1 错误描写叙述 [Err] 1136 - Column count doesn't match value count at row 1 Procedure execution failed 113 ...

  10. php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便)

    php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便) 一.总结 直接看代码实例,特别方便易懂 thinkphp控制器利眠宁不支持(说明 ...