题目传送门

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的更多相关文章

  1. ACM 中 矩阵数据的预处理 && 求子矩阵元素和问题

            我们考虑一个$N\times M$的矩阵数据,若要对矩阵中的部分数据进行读取,比如求某个$a\times b$的子矩阵的元素和,通常我们可以想到$O(ab)$的遍历那个子矩阵,对它的各 ...

  2. [BZOJ1127][POI2008] KUP子矩阵

    Description 给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个n*n的地图 Output 输出矩形的左 ...

  3. 【SCOI2005】 最大子矩阵 BZOJ 1084

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

  4. 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵

    题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下 ...

  5. HDU1559 最大子矩阵 (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)  ...

  6. bzoj1057: [ZJOI2007]棋盘制作--最大子矩阵

    既然要求最大01子矩阵,那么把应该为0的位置上的数取反,这样就变成求最大子矩阵 最大子矩阵可以用单调栈 #include<stdio.h> #include<string.h> ...

  7. hdu 1559 最大子矩阵

    最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  8. NOIP2014pj子矩阵[搜索|DP]

    题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第2.4行和第2.4.5列交叉位置的元素 ...

  9. openjudge1768 最大子矩阵[二维前缀和or递推|DP]

    总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...

随机推荐

  1. my sql 下左连接 右链接、内连接等应用,INNER JOIN LEFT JOIN RIGHT JOIN

    1.数据准备 建两个表格: create table student (idstu int, namestu ) ); ,"张三")(,"李四"),(,&quo ...

  2. 铁乐学Python_day10_函数2

    今天书接昨天的函数继续去学习了解: 昨天说到函数的动态参数. 1.函数的[动态参数] *args 动态参数,万能参数 args接受的就是实参对应的所有剩余的位置参数,并将其放在元组( )中. def ...

  3. 剑指offer 07斐波那契数列

    现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 java版本: public class Solution { public static void m ...

  4. windows server 2016部署服务

          绪论 有时候,如果安装系统数量比较多,而且数量较多,人工使用U盘或者光盘安装,效率较低,通过网络可以批量安装. 还可以做到无人安装. PXE PXE(preboot execute env ...

  5. zabbix3.4 修改监控范围

    需求:一段时间内不监控主机的流量(不告警!!!)

  6. SQL——快速定位相关的外键表

  7. D:\hunting2014\小题目\字符串倒序

    #include<stdio.h>#include<string.h> char *revert(char *str){ char temp; char *p = str; c ...

  8. Git忽略提交 .gitignore配置。自动生成IDE的.gitignore。解决gitignore不生效

    语法 以”#”号开头表示注释: 以斜杠“/”开头表示目录: 以星号“*”通配多个字符: 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表: 以叹号“!”表示不忽略(跟踪)匹配到的文件或 ...

  9. 更改Request Parameters中的值

    1. 定义ParameterRequestWrapper 继承HttpServletRequestWrapper public class ParameterRequestWrapper extend ...

  10. Linux 上安装MyEclipse

    操作系统ubuntu14.04,亲测安装MyEclipse2014成功,且破解成阿功.在安装myeclipse之前,您当然需要安装jdk了,jdk在这里不做介绍 下载 下载linux版本的MyEcli ...