BZOJ1084_最大子矩阵_KEY
DP。
但要分类讨论,对于M=1和M=2的情况分别讨论。
1>M=1
设f[i][j]表示选了i个矩阵,到第j位。N^3转移。(前缀和)
2>M=2
设f[i][j][k]表示选了i个矩阵,第一列到i,第二列到j。
枚举i,j,k后枚举j1和k1表示选一行的情况。
如果j==k则可以从之前的两行一起转移。
code:
/**************************************************************
Problem: 1084
User: yekehe
Language: C++
Result: Accepted
Time:112 ms
Memory:1476 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
using namespace std; int f[][][];
int N,M,K,a[][],sum[][];
int F[][];
int S[]; void work()
{
for(int i=;i<=N;i++){scanf("%d",&S[i]);S[i]+=S[i-];}
for(int i=;i<=K;i++)for(int j=;j<=N;j++)F[i][j]=-1e9;
for(int i=;i<=K;i++)
for(int j=;j<=N;j++){
F[i][j]=F[i][j-];
for(int k=;k<j;k++){
F[i][j]=max(F[i][j],F[i-][k]+S[j]-S[k]);
}
}
printf("%d",F[K][N]);
return ;
} int main()
{
scanf("%d%d%d",&N,&M,&K);
if(M==)return work(),;
for(int i=;i<=N;i++)
for(int j=;j<=M;j++){
scanf("%d",&a[i][j]);
sum[i][j]=sum[i-][j]+a[i][j];
}
for(int i=;i<=K;i++)for(int j=;j<=N;j++)for(int k=;k<=N;k++)f[i][j][k]=-1e9;
for(int i=;i<=K;i++)
for(int j=;j<=N;j++)
for(int k=;k<=N;k++){
f[i][j][k]=max(f[i][j-][k],f[i][j][k-]);
for(int j1=;j1<j;j1++)
f[i][j][k]=max(f[i][j][k],f[i-][j1][k]+sum[j][]-sum[j1][]);
for(int k1=;k1<k;k1++)
f[i][j][k]=max(f[i][j][k],f[i-][j][k1]+sum[k][]-sum[k1][]);
if(j==k)
for(int h=;h<j;h++)
f[i][j][k]=max(f[i][j][k],f[i-][h][h]+sum[j][]-sum[h][]+sum[k][]-sum[h][]);
}
printf("%d",f[K][N][N]);
return ;
}
BZOJ1084_最大子矩阵_KEY的更多相关文章
- ACM 中 矩阵数据的预处理 && 求子矩阵元素和问题
我们考虑一个$N\times M$的矩阵数据,若要对矩阵中的部分数据进行读取,比如求某个$a\times b$的子矩阵的元素和,通常我们可以想到$O(ab)$的遍历那个子矩阵,对它的各 ...
- [BZOJ1127][POI2008] KUP子矩阵
Description 给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个n*n的地图 Output 输出矩形的左 ...
- 【SCOI2005】 最大子矩阵 BZOJ 1084
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
- 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵
题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下 ...
- HDU1559 最大子矩阵 (二维树状数组)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others) ...
- bzoj1057: [ZJOI2007]棋盘制作--最大子矩阵
既然要求最大01子矩阵,那么把应该为0的位置上的数取反,这样就变成求最大子矩阵 最大子矩阵可以用单调栈 #include<stdio.h> #include<string.h> ...
- hdu 1559 最大子矩阵
最大子矩阵 Time Limit: 30000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- NOIP2014pj子矩阵[搜索|DP]
题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第2.4行和第2.4.5列交叉位置的元素 ...
- openjudge1768 最大子矩阵[二维前缀和or递推|DP]
总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...
随机推荐
- leetCode题解之Jewels and Stones
1.题目描述 2.分析 使用HashTable 是解决这种的好方法. 3.代码 int numJewelsInStones(string J, string S) { map<char,int& ...
- vs2017 调试时出现 cannot connect to runtime process错误
用Visual Studio 2017 .net core进行开发时 ,调试运行项目时出现如下错误 解决方案,调试>选项,取消勾选,关闭对JavaScript的调试
- Coursera-AndrewNg(吴恩达)机器学习笔记——第二周编程作业(线性回归)
一.准备工作 从网站上将编程作业要求下载解压后,在Octave中使用cd命令将搜索目录移动到编程作业所在目录,然后使用ls命令检查是否移动正确.如: 提交作业:提交时候需要使用自己的登录邮箱和提交令牌 ...
- upper_bound()与lower_bound()的使用
upper_bound()与lower_bound()的使用 c++中的许多库函数可以使我们的代码量大大减少,也可使问题简单化.很早之前就接触了upper_bound()与lower_bound(), ...
- pyspark视频
在一个网课上买了一个pyspark视频,贼贵,本来是想把视频解压密码记下来分享出来的,可是其实用的是EVPLAYER,一机一码,一共只有3个激活码 这里我分享视频链接,百度网盘: https://pa ...
- IO多路复用(select)
select在操作系统内部,维护了一个for循环,检测对象是否变化.select在各种平台都可使用,但效率不高.select对监听的个数是有限制的(1024) poll与select相同,但是没有监听 ...
- CSS控制图片和文字在同一行显示且对齐的3种方法
CSS控制图片和文字在同一行显示且对齐的3种方法 在 HTML 代码中,有时会需要在文字旁边加上一个图标. 默认情况,是图片置顶对齐,文字置底对齐,所以通常图片高,文字低,不能水平居中对齐. 常见方法 ...
- [转]IE9.0或者360下js(JavaScript、jQuery)不能正确执行(加载),按F12后执行正常;Firefox下ajax的success返回数据data(json、string)无法获取
兼容问题1: 页面的分享等插件加载不全,并无法点击. 兼容问题2: IE下页面选择器(#id..class.etc.)绑定click事件无法访问到,后台springmvc方法,也无法获取ajax的su ...
- python第十四课--排序及自定义函数之自定义函数(案例二)
案例二: python中定义有/无返回值的函数,演示python没有函数重载这一说 需求:自定义函数:计算两个整数的和值两个原则:1).有没形参有,两个 2).有没返回值可有可无 def my_sum ...
- FFI (语言交互接口(Foreign Function Interface))
FFI(Foreign Function Interface)是用来与其它语言交互的接口, 在有些语言里面称为语言绑定(language bindings), Java 里面一般称为 JNI(Java ...