传送门

题目大意:

从矩阵中取出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. 洛谷——P1035 级数求和

    https://www.luogu.org/problem/show?pid=1035 题目描述 已知:Sn= 1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K. ...

  2. Hadoop ecosystem 生态圈

    Cascading: hadoop上面的workflow Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行 ...

  3. Android中的Parcelable接口和Serializable使用方法和差别

    Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...

  4. python把一个列表画柱状图

    https://blog.csdn.net/w113691/article/details/80385534

  5. 关于javascript中私有作用域的预解释

    1.如何区分私有变量还是全局变量 1).在全局作用域下声明(预解释的时候)的变量是全局变量 2).在“私有作用域中声明的变量”和“函数的形参”都是私有变量 在私有作用域中,我们代码执行的时候遇到一个变 ...

  6. LA 3989 - Ladies' Choice 稳定婚姻问题

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  7. (转)RMAN-06054: media recovery requesting unknown archived log for thread...

    转自:http://blog.itpub.net/29800581/viewspace-1307267/ 使用rman执行recover database 的时候出现RMAN-06054的错误提示: ...

  8. BP神经网络公式推导及实现(MNIST)

    BP神经网络的基础介绍见:http://blog.csdn.net/fengbingchun/article/details/50274471,这里主要以公式推导为主. BP神经网络又称为误差反向传播 ...

  9. 通过量产解决U盘写保护,无法格式化问题

    1.首先下载ChipGenius.地址:http://pan.baidu.com/s/1eQvf1zc 2.解压,双击ChipGenius_v4_00_0027_pre2. 3.能够检測到U盘的主控厂 ...

  10. Seal Report开放数据库报表工具(.Net)

    Seal Report_20160923 概述:开放数据库报表工具(.Net) 简介:Seal-Report提供了一个完整的框架,用于从任何数据库生成日常报告和仪表板.Seal-Report是Micr ...