题目描述

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

输入输出格式

输入格式:

第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的分值的绝对值不超过32767)。

输出格式:

只有一行为k个子矩阵分值之和最大为多少。

输入输出样例

输入样例#1:

3 2 2
1 -3
2 3
-2 3
输出样例#1:

9

分m=1和m=2两种情况考虑。

m=1时,预处理出前缀和sum[]。

设f[i][j]为到达第i格,已经放了j个子矩阵的最大和,

那么每次先把f[i][j]的值设为f[i-1][j](第i个元素不属于第j个子矩阵)

剩下的情况就是第i个元素属于第j个子矩阵了。

这时候用max(f[p-1][j-1]+(sum[i]-sum[p-1]), 1<=p<=i)更新f[i][j]的最大值,即枚举第j个子矩阵的起始点。

最终答案为f[n][k]。(边界条件为f[0][j]=0,包含空矩阵)

m=2时,预处理出分别列的前缀和sum1[],sum2[]。

设f[i][j][l]为在第1列到达第i格,第2列到达第j格,已经放了l个子矩阵的最大和,

那么每次先把f[i][j][l]的值设为max(f[i-1][j][l],f[i][j-1][l])(第i行第1列不属于子矩阵或第j行第2列不属于子矩阵,两者取较大值)

剩下的情况就是第i行第1列和第j行第2列都属于子矩阵了。

分两种情况:

一、第i行第1列和第j行第2列属于不同的子矩阵

分别枚举第i行第1列所在子矩阵的起始点和第j行第2列所在子矩阵的起始点并更新答案,

即用max(f[p-1][j][l-1]+(sum1[i]-sum1[p-1]), 1<=p<=i)和max(f[i][p-1][l-1]+(sum2[j]-sum2[p-1]),1<=p<=j)更新f[i][j]的最大值。

二、第i行第1列和第j行第2列属于同一子矩阵

仅当i==j时才包含这种情况(因为i和j要作为当前状态中子矩阵的末尾)。这时候这个子矩阵的列数必定为2。

还是一样枚举子矩阵的起始点,

在i==j的条件下用max(f[p-1][p-1][l-1]+(sum1[i]-sum1[p-1])+(sum2[j]-sum2[p-1]),1<=p<=i)更新答案。

最后答案为f[n][n][k](边界条件为f[0][0][l]=0,包含空矩阵)

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int f1[][],f2[][][],a[][],sum1[],sum2[];
int n,m,k;
int main()
{int i,j,l,p;
cin>>n>>m>>k;
for (i=;i<=n;i++)
{
for (j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
if (j==) sum1[i]=sum1[i-]+a[i][j];
else sum2[i]=sum2[i-]+a[i][j];
}
}
if (m==)
{
for (i=;i<=n;i++)
for (j=;j<=k;j++)
{f1[i][j]=f1[i-][j];
for (l=;l<=i;l++)
f1[i][j]=max(f1[i][j],f1[l-][j-]+sum1[i]-sum1[l-]);
}
cout<<f1[n][k];
}
else
{
for (i=;i<=n;i++)
{
for (j=;j<=n;j++)
{
for (l=;l<=k;l++)
{f2[i][j][l]=max(f2[i-][j][l],f2[i][j-][l]);
for (p=;p<=i;p++)
f2[i][j][l]=max(f2[i][j][l],f2[p-][j][l-]+sum1[i]-sum1[p-]);
for (p=;p<=j;p++)
f2[i][j][l]=max(f2[i][j][l],f2[i][p-][l-]+sum2[j]-sum2[p-]);
if (i==j)
for (p=;p<=i;p++)
f2[i][j][l]=max(f2[i][j][l],f2[p-][p-][l-]+sum2[j]-sum2[p-]+sum1[i]-sum1[p-]);
}
}
}
cout<<f2[n][n][k];
}
}

[SCOI2005]最大子矩阵的更多相关文章

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

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

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

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

  3. bzoj千题计划198:bzoj1084: [SCOI2005]最大子矩阵

    http://www.lydsy.com/JudgeOnline/problem.php?id=1084 m=1: dp[i][j] 前i个数,选了j个矩阵的最大和 第i个不选:由dp[i-1][j] ...

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

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

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

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

  6. [Luogu 2331] [SCOI2005]最大子矩阵

    [Luogu 2331] [SCOI2005]最大子矩阵 题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 ...

  7. 洛谷P2331 [SCOI2005]最大子矩阵 DP

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

  8. [bzoj1084][SCOI2005]最大子矩阵_动态规划_伪·轮廓线dp

    最大子矩阵 bzoj-1084 SCOI-2005 题目大意:给定一个n*m的矩阵,请你选出k个互不重叠的子矩阵使得它们的权值和最大. 注释:$1\le n \le 100$,$1\le m\le 2 ...

  9. luogu P2331 [SCOI2005]最大子矩阵

    传送门 \[\huge\mathit{warning}\] \[\small\text{以下说明文字高能,请心脏病,,,,,,人士谨慎观看,请未成年人在家长陪同下观看}\] 皮这一下很开心 其实是代码 ...

随机推荐

  1. C语言第一次作业——输入输出格式

    题目1温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代码 #include& ...

  2. DML数据操作语言之查询(一)

    1.select语句基础 基本语句格式:  select <列名>,.... from <表名>; select子句中列举出希望从表中查询出的列的名称,from子句则指定了选取 ...

  3. 分布式系统之消息中间件rabbitmq

    分布式系统之消息中间件rabbitmq 博客分类: 感谢:  一般php 用rabbitmq  java 用activemq  http://spartan1.iteye.com/blog/11802 ...

  4. nodeJs多进程Cluster

    在前端页面中,如果我们想进行多进程,我们会用到WebWorker,而在NodeJs中,我们如果想充分利用服务器核心资源,我们会用到Node中Cluster模块 直接上代码吧: const cluste ...

  5. token 验证

    组件: https://jwt.io/#libraries-io

  6. solr云的简单搭建(了解)

    1.认识系统架构 1.1.集群概述 1.1.1.单点服务器的问题 我们之所以要学习集群,是因为单点服务器,存在一系列的问题. 我们以前学习的JavaEE项目,都是部署在一台Tomcat上,所有的请求, ...

  7. 新概念英语(1-109)A Good Idea

    Lesson 109 A good idea 好主意 Listen to the tape then answer this question. What does Jane have with he ...

  8. css(1-1)样式表

    CSS Id 和 Class id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器. id ...

  9. nginx配置反向代理详细教程(windows版)

    内容属于原创,如果需要转载,还请注明地址:http://www.cnblogs.com/j-star/p/8785334.html Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(I ...

  10. SendMessage 遇到的神坑

    场景 两个进程A和B,需要从A中设置B中的文本框的内容 过程 x.x.x.x. 成功获取了B中的内容,惊喜,离成功更近异步 xxxx ***** ....... x.x.x.x. 大约查找了几百个网页 ...