1084: [SCOI2005]最大子矩阵

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

【分析】

  终于考完ws的期末考回来刷题了,表示很桑心先刷一道水题淡定一下。。。

  表示又是智障看错了以为k是100。

  思路很简单,m<=2,分m=1 m=2两种情况讨论。

  m=1:

  f[i][j]表示选了前i个数,j个矩阵的最优值,枚举最后一个矩阵转移。

  m=2:

  f[i][j][k]表示第一行选了前i个数,第二行选了前j个数,一共k个矩阵的最优值。

  状态:1、枚举第一行最后一个矩阵。

     2、枚举第二行最后一个矩阵。

     3、当i=j,可以两行一起选,枚举两行一起选的最后一个矩阵。

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 110 int a[][Maxn],h[][Maxn],f[Maxn][Maxn];
int d[Maxn][Maxn][Maxn]; int mymax(int x,int y) {return x>y?x:y;} int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++)
for(int j=;j<m;j++) scanf("%d",&a[j][i]);
h[][]=h[][]=;
for(int i=;i<m;i++)
for(int j=;j<=n;j++) h[i][j]=h[i][j-]+a[i][j];
int ans=;
if(m==)
{
memset(f,,sizeof(f));
for(int i=;i<=n;i++)
for(int j=;j<=i&&j<=k;j++)
{
for(int l=;l<i;l++)
f[i][j]=mymax(f[i][j],f[l][j-]+h[][i]-h[][l]);
f[i][j]=mymax(f[i][j],f[i-][j]);
}
for(int i=k;i<=n;i++) ans=mymax(ans,f[i][k]);
}
else
{
memset(d,,sizeof(d));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
for(int l=;l<=k;l++)
{
for(int p=;p<i;p++) d[i][j][l]=mymax(d[i][j][l],d[p][j][l-]+h[][i]-h[][p]);
for(int p=;p<j;p++) d[i][j][l]=mymax(d[i][j][l],d[i][p][l-]+h[][j]-h[][p]);
if(i==j)
{
for(int p=;p<i;p++) d[i][j][l]=mymax(d[i][j][l],d[p][p][l-]+h[][i]+h[][j]-h[][p]-h[][p]);
}
d[i][j][l]=mymax(d[i][j][l],d[i-][j][l]);
d[i][j][l]=mymax(d[i][j][l],d[i][j-][l]);
if(l==k) ans=mymax(ans,d[i][j][l]);
// printf("d[%d][%d][%d]= %d\n",i,j,l,d[i][j][l]);
}
}
printf("%d\n",ans);
return ;
}

2017-01-11 09:11:39

【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)的更多相关文章

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

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

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

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

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

    题链 http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩 ...

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

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

  5. bzoj1084: [SCOI2005]最大子矩阵 dp

    这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 题解:m很小分类讨论,m==1时怎么搞都可以,m==2时,dp[i][j][k]表 ...

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

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

  7. BZOJ 1084 (SCOI 2005) 最大子矩阵

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3560 Solved: 1779 [Submit][Sta ...

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

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

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

随机推荐

  1. 微信小程序滑动选择器

    实现微信小程序滑动选择效果 在wxml文件中,用一个picker标签代表选择器,bindchange是用户点击确定后触发的函数,index是picker自带的参数,用户点击确定后,bindchange ...

  2. Python学习笔记 - day12 - Python操作NoSQL

    NoSQL(非关系型数据库) NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称.用于超大规模数据的存储.(例如 ...

  3. Vue组件-动态组件

    动态组件 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,可以让多个组件使用同一个挂载点,并动态切换: <div id="app6"& ...

  4. mysql主从复制、操作语句

    授权 grant replication slave on *.* to slave@192.168.10.64 identified by "123456" 登录测试 mysql ...

  5. C++之复制控制

    只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数叫做复制构造函数(有时也称为拷贝构造函数),例如: class Person{ public: Person();/ ...

  6. java===java基础学习(11)---继承

    继承可以解决代码复用,让编程更加靠近人的思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法.所有的子类不需要重新定义这些属性和方法,只需要通过ex ...

  7. django “如何”系列8:如何为模型提供初始化数据

    当你第一次配置一个app的时候,有时候使用硬编码的数据去预填充你的数据库是非常有用的.这里有几个你可以让django自动创建这些数据的方法:你可以提供固定格式的初始化数据或者提供通过SQL初始化数据. ...

  8. 阻止父类的create,是无法阻止的

  9. HDU-4255

    A Famous Grid Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  10. 在k8s 1.7.0上启用dashboard的注意事项

    因为自k8s 1.6之后,有基于角色的安全性. 所以很多网上以前的教程就不能使用了. 结合以下三个文档,暂时实现了dashboard界面的推出. http://blog.csdn.net/jinzil ...