题目链接

  这题的状态转移方程真是粗鄙。

  f[i][j][k]表示前i行用了j个矩阵状态为k的时候的最大值。

  k=0:两列都不选。

  k=1:取左弃右。

  k=2:选右弃左。

  k=3:左右都选,但分属于两个独立矩阵。

  k=4:左右都选,且同属于一个矩阵。

  参考题解:孤寂的时代

  代码

#include<cstdio>
#include<cctype>
#include<cstring> inline long long max(long long x,long long y){ return x>y?x:y; } inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int f[][][];
int que[][]; int main(){
int n=read(),m=read(),q=read();
for(int i=;i<=n;++i)
for(int j=;j<=m;++j) que[i][j]=read();
memset(f,0xaf,sizeof(f));
for(int i=;i<=n;++i)
for(int j=;j<=q;++j) f[i][j][]=;
for(int i=;i<=n;++i){
int a=que[i][],b=que[i][];
for(int j=;j<=q;++j){
f[i][j][]=max(max(f[i-][j][],f[i-][j][]),max(f[i-][j][],max(f[i-][j][],f[i-][j][])));
f[i][j][]=max(max(max(f[i-][j-][],f[i-][j][]),max(f[i-][j-][],f[i-][j][]))+a,f[i-][j-][]+a);
f[i][j][]=max(max(max(f[i-][j-][],f[i-][j-][]),max(f[i-][j][],f[i-][j][]))+b,f[i-][j-][]+b);
f[i][j][]=max(f[i-][j-][],max(f[i-][j-][],f[i-][j][]))+a+b;
if(j>) f[i][j][]=max(f[i][j][],f[i-][j-][]+a+b);
f[i][j][]=max( max(f[i-][j-][],f[i-][j-][]),max(f[i-][j-][],f[i-][j-][]))+a+b;
f[i][j][]=max(f[i][j][],f[i-][j][]+a+b);
}
}
int ans=f[n][q][];
if(ans<f[n][q][]) ans=f[n][q][];
if(ans<f[n][q][]) ans=f[n][q][];
if(ans<f[n][q][]) ans=f[n][q][];
if(ans<f[n][q][]) ans=f[n][q][];
printf("%d",ans);
return ;
}

【Luogu】P2331最大子矩阵(DP)的更多相关文章

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

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

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

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

  3. 【Luogu】P2258子矩阵(状态压缩,DP)

    233今天蒟蒻我连文化课都没听光想着这个了 然后我调了一下午终于过了!!! 一看数据范围似乎是状压,然而216等于65536.开一个65536*65536的二维数组似乎不太现实. 所以Rqy在四月还是 ...

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

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

  5. ZOJ1074 (最大和子矩阵 DP)

    F - 最大子矩阵和 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u   Descri ...

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

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

  7. P2258 子矩阵(dp)

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

  8. BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp

    1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...

  9. Luogu P2297 刷图 DP

    题目背景 loidc,LOI中的传说级哲♂学家,曾经创造一天内入坑maxlongint个弃坑0x7fffffff个的神奇纪录.目前,loidc最喜欢的游戏就是地下城与勇♂士. 题目描述 Loidc是一 ...

随机推荐

  1. js如何调用电脑的摄像头

    闲来无事,用js写了一个调用摄像头的demo,并用canvas显示保存.这个功能很实用,比如上传用户的头像,即时拍照及时上传. Html: <video width="200px&qu ...

  2. 在线matlab网站

    网址: http://octave-online.net/ 使用:

  3. 从零开发分布式数据库中间件 二、构建MyBatis的读写分离数据库中间件

    在上一节 从零开发分布式数据库中间件 一.读写分离的数据库中间件 中,我们讲了如何通过ThreadLocal来指定每次访问的数据源,并通过jdbc的连接方式来切换数据源,那么这一节我们使用我们常用的数 ...

  4. Docker镜像的目录存储讲解

    我们成功安装完docker后,执行命令行sudo docker run hello-world, 如果是第一次执行,则会从远程拉取hello-world的镜像到本地,然后运行,显示hello worl ...

  5. Mybatis-Generator逆向生成Po,Mapper,XMLMAPPER(idea)

    前文有一篇手工生成的说明,地址: http://www.cnblogs.com/xiaolive/p/4874605.html, 现在这个补充一下在idea里面的自动版本的数据库逆向生成工具: 一.g ...

  6. 爬虫_python3_抓取猫眼电影top100

    使用urllib,request,和正则表达式,多线程进行秒抓,以及异常处理结果: import urllib,re,json from multiprocessing import Pool#多进程 ...

  7. Salt Master报错:Minion did not return. [No response]

    在salt master端执行salt ‘*’ test.ping时,某一节点出现如下报错:Minion did not return. [No response] 登陆到这一节点查看minion的日 ...

  8. VC-基础:VC中得到当前系统的时间和日期

    得到当前时间的方法一般都是得到从1900年0点0分到现在的秒数,然后转为年月日时分秒的形式得到当前的时间(时分秒).主要方法如下: 1)使用CRT函数 C++代码   ]; time_t nowtim ...

  9. 005 String s = "Hello";s = s + " world!";执行这两行代码执行后,原始的 String 对象中的内容到底变了没有?

    原始的String对象中的内容没有改变成“Hello world”. 1.原因 因为在Java中String类被设计成不可改变的类,所以String类的所有对象都是不可变的.第一句代码中,s(存储在栈 ...

  10. Codeforces Round #510 #C Array Product

    http://codeforces.com/contest/1042/problem/C 给你一个有n个元素序列,有两个操作:1,选取a[i]和a[j],删除a[i],将$a[i]*a[j]$赋值给a ...