题目描述

这里有一个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
 

Solution

这道题作为一道省选DP来讲的,偏简单了一些.
但是还是有一点思维难度的.
拿到先看 m , m 只有 1 和 2 ?
所以先打了一下 m=1 的情况.
 

状态定义:

f[i][l] 表示到第 i 个点 用掉 l 个矩形的最大值.

转移方程:

for(pre 1--> i-1)

f[i][l]=max(f[i-1][l],f[pre][l-1]+sum[pre-->i]); //sum 表示pre到i的元素值的和.

于是 m=1 便有30 pts.

然后再想 m=2 , 由 m=1 拓展?

于是 定义状态 : f[ i ][ j ][ l ] 表示上面一列到了 i 下面一列到了 j 已选择 l 个矩阵的最大值.

想了想,m=2有一下几种情况:

1. 这个点我不做拓展  --> max( f[ i-1 ][ j-1 ][ l ] , f[ i-1 ][ j-1 ][ l ] ,f[ i ][ j-1 ][ l ] ) ;

2. 由上一列扩展一个小的 s*1 面积的

3. 由上一列扩展一个小的 s*1 面积的

4. 两列都作扩展 ,来一个 s*2 面积的

于是乎,这道题的 DP 也自然就出来了.

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int f1[][],f[][][];
int c[][],sum[][]; void solve()
{
for(int i=;i<=n;i++)
for(int l=;l<=k;l++)
{
f1[i][l]=f1[i-][l];
for(int j=;j<i;j++)
f1[i][l]=max(f1[j][l-]+sum[][i]-sum[][j],f1[i][l]);
}
cout<<f1[n][k];
return;
} int main()
{
cin>>n>>m>>k;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&c[j][i]),sum[j][i]=sum[j][i-]+c[j][i];
if(m==) {solve();return ;} for(int l=;l<=k;l++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
f[i][j][l]=max(f[i-][j][l],f[i][j-][l]);
for(int pre=;pre<i;pre++) f[i][j][l]=max(f[i][j][l],f[pre][j][l-]+sum[][i]-sum[][pre]);
for(int pre=;pre<j;pre++) f[i][j][l]=max(f[i][j][l],f[i][pre][l-]+sum[][j]-sum[][pre]);
if(i==j)
for(int pre=;pre<i;pre++)
f[i][j][l]=max(f[i][j][l],f[pre][pre][l-]+sum[][i]-sum[][pre]+sum[][j]-sum[][pre]);
}
cout<<f[n][n][k]; return ;
}

[SCOI2005]最大子矩阵 (动态规划)的更多相关文章

  1. BZOJ1084 [SCOI2005]最大子矩阵 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1084 题意概括 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注 ...

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

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

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

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

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

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

  5. 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] ...

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

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

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

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

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

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

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

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

随机推荐

  1. Azure 项目构建 – 部署 Drupal 网站

    通过完整流程详细介绍了如何通过 Azure Web 应用. MySQL DB on Azure 等服务在 Azure 平台上快速搭建 Drupal 服务器,并将其连接到 MySQL 数据库. 此系列的 ...

  2. 微软爆料新型系统,Windows7,Windows10强势来袭

    本系统是10月5日最新完整版本的Windows10 安装版镜像,win10正式版,更新了重要补丁,提升应用加载速度,微软和百度今天宣布达成合作,百度成为win10 Edge浏览器中国默认主页和搜索引擎 ...

  3. solr scheme配置简介

    solr 字段配置,和数据库数据索引配置 配置solr字段. schema.xml 文件里配置 先讲解一下,里面的一些字段 1. <types> ... </types> 表示 ...

  4. thinkphp 结合phpexcel实现excel导入

    控制器文件: class ExcelAction extends Action { public function __construct() { import('ORG.Util.ExcelToAr ...

  5. eclipse去除js(JavaScript)验证错误

    第一步: 去除eclipse的JS验证: 将windows->preference->Java Script->Validator->Errors/Warnings-> ...

  6. PAT Basic 1034

    1034 有理数四则运算 本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数, ...

  7. 关于springmvc返回json格式数据

    1.引入maven依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifac ...

  8. luogu3698 [CQOI2017]小Q的棋盘

    最长链是根节点到深度最深的结点的路径. 显然,要么直接走最长链,要么兜兜转转几个圈圈再走最长链,而最长链以外的结点因为要"兜圈",所以要经过两次. #include <ios ...

  9. android 之 TabHost

    TabHost的实现有两种方式,第一种继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost.各个Tab中的内容在布局文件中定义就行了. mainAct ...

  10. 高级java、C#、php、SQL、JavaScript......+n多编程语言学习分享

    /*入园两周年纪念.在搬砖之路一去不返*/ //搬砖什么都好,就是有点伤Ctrl键. <div style="display:none;"> </div>