bzoj1084: [SCOI2005]最大子矩阵 dp
这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵不能相互重叠。
题解:m很小分类讨论,m==1时怎么搞都可以,m==2时,dp[i][j][k]表示第一列枚举到i,第二列枚举到j,花了k次操作的最大子矩阵和,然后转移有三种一种是只转移i,一种是只转移j,还有一种是ij都转移,然后我们需要枚举空出来的地方的终点,我们预处理出ma[i][j]表示从i+1到j的后缀最大和,三维是三种转移所需要的的情况,然后可以O(3*N^3)的解决
- /**************************************************************
- Problem: 1084
- User: walfy
- Language: C++
- Result: Accepted
- Time:748 ms
- Memory:2716 kb
- ****************************************************************/
- //#pragma comment(linker, "/stack:200000000")
- //#pragma GCC optimize("Ofast,no-stack-protector")
- //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
- //#pragma GCC optimize("unroll-loops")
- #include<bits/stdc++.h>
- #define fi first
- #define se second
- #define mp make_pair
- #define pb push_back
- #define pi acos(-1.0)
- #define ll long long
- #define vi vector<int>
- #define mod 1000000007
- #define C 0.5772156649
- #define ls l,m,rt<<1
- #define rs m+1,r,rt<<1|1
- #define pil pair<int,ll>
- #define pli pair<ll,int>
- #define pii pair<int,int>
- #define cd complex<double>
- #define ull unsigned long long
- #define base 1000000000000000000
- #define fio ios::sync_with_stdio(false);cin.tie(0)
- using namespace std;
- const double eps=1e-;
- const int N=+,maxn=+,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
- int n,m,K;
- ll a[N][],sum[N][],ma[N][N][];
- ll dp[N][N][];
- void prepare()
- {
- if(m==)
- {
- for(int j=;j<=n;j++)a[j][]=-1e9;
- m=;
- }
- for(int i=;i<=n;i++)
- {
- sum[i][]=sum[i-][]+a[i][];
- sum[i][]=sum[i-][]+a[i][];
- sum[i][]=sum[i-][]+a[i][]+a[i][];
- }
- for(int i=;i<=;i++)
- {
- for(int j=;j<=n;j++)
- {
- for(int k=j+;k<=n;k++)
- {
- for(int l=j;l<=k;l++)
- {
- ma[j][k][i]=max(ma[j][k][i],sum[k][i]-sum[l][i]);
- }
- }
- }
- }
- }
- void gao()
- {
- for(int i=;i<=K;i++)
- {
- for(int j=;j<=n;j++)
- {
- for(int k=;k<=n;k++)
- {
- for(int l=j+;l<=n;l++)
- {
- dp[l][k][i]=max(dp[l][k][i],dp[j][k][i-]+ma[j][l][]);
- }
- for(int l=k+;l<=n;l++)
- {
- dp[j][l][i]=max(dp[j][l][i],dp[j][k][i-]+ma[k][l][]);
- }
- for(int l=max(j,k)+;l<=n;l++)
- {
- dp[l][l][i]=max(dp[l][l][i],dp[j][k][i-]+ma[max(j,k)][l][]);
- }
- }
- }
- }
- ll ans=;
- for(int i=;i<=n;i++)
- for(int j=;j<=n;j++)
- for(int k=;k<=K;k++)
- ans=max(ans,dp[i][j][k]);
- printf("%lld\n",ans);
- }
- int main()
- {
- scanf("%d%d%d",&n,&m,&K);
- for(int i=;i<=n;i++)
- for(int j=;j<=m;j++)
- scanf("%lld",&a[i][j]);
- prepare();
- gao();
- return ;
- }
- /********************
- ********************/
bzoj1084: [SCOI2005]最大子矩阵 dp的更多相关文章
- [bzoj1084][SCOI2005]最大子矩阵_动态规划_伪·轮廓线dp
最大子矩阵 bzoj-1084 SCOI-2005 题目大意:给定一个n*m的矩阵,请你选出k个互不重叠的子矩阵使得它们的权值和最大. 注释:$1\le n \le 100$,$1\le m\le 2 ...
- BZOJ 1084: [SCOI2005]最大子矩阵 DP
1084: [SCOI2005]最大子矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n* ...
- 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] ...
- 洛谷P2331 [SCOI2005]最大子矩阵 DP
P2331 [SCOI2005]最大子矩阵 题意 : 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 第一行为n,m,k(1≤n≤ ...
- [bzoj1084][SCOI2005]最大子矩阵(DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1084 分析: m=1时:相当于只有一行数,让你取出p段,使得总和最大 明显可以DP,f ...
- BZOJ1084 [SCOI2005]最大子矩阵 动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1084 题意概括 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注 ...
- bzoj1084: [SCOI2005]最大子矩阵
dp.状态转移方程在代码里 #include<cstdio> #include<algorithm> #include<cstring> using namespa ...
- BZOJ1084 SCOI2005最大子矩阵
考虑DP f[i][j][k]表示一行到i一行到j共取k块最大值,类似于最长公共子序列n^2那种 注意相等时可以一起拿 By:大奕哥 #include<bits/stdc++.h> usi ...
- bzoj1084 [SCOI2005]最大子矩阵——背包
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1084 水题...分类讨论一下即可. 代码如下: #include<iostream&g ...
随机推荐
- Python开发【项目】:生产环境下实时统计网站访问日志信息
日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...
- IDEA安装以及项目初始化
首先安装idea: 如果15.0版本安装不上就安装16.0: 点击安装文件以后,一直点下一步就可以了. 安装完成后设置: 如果没有的话,需要点击SDKs,点击+,然后选择电脑上安装的JDK. 接下来创 ...
- centos Linux下磁盘管理 parted,df ,du,fdisk,partprobe,mkfs.ext4,mount,/etc/fstab,fsck,e2fsck,mk2efs,tmpfs ,nr_inodes, LVM,传统方式扩容文件系统 第七节课
centos Linux下磁盘管理 parted,df ,du,fdisk,partprobe,mkfs.ext4,mount,/etc/fstab,fsck,e2fsck,mk2efs,tmpf ...
- SQL Server简洁查询正在运行SQL(等待事件)
通常我们可以使用 sp_who2 我们希望更加简洁的信息,下面这个查询使用系统表sys.sysprocesses,以及sys.dm_exec_sql_text做OUTER APPLY. T-SQL是这 ...
- cocos-lua基础学习(10)scheduler类学习笔记
local scheduler = cc.Director:getInstance():getScheduler() local function shouldNotCrash(dt) end loc ...
- 2.JVM运行机制 -- JVM序列
上一次写了1.初步认识JVM -- JVM序列,今天接着记录写JVM的运行机制. 一.JVM启动流程 Java平台包括JVM以及Java语言,其中JVM也是运行在操作系统中的一个应用程序进程,那么也应 ...
- Linux 中的 Service
参考: cnblogs.com/xiaofan21 - linux service和daemon cnblogs.com/xuange306 - linux service命令常见使用方法 cnblo ...
- ZOJ Monthly, January 2019
A: Little Sub and Pascal's Triangle Solved. 题意: 求杨辉三角第n行奇数个数 思路: 薛聚聚说找规律,16说Lucas 答案是 $2^p \;\;p 为 n ...
- Python: 矩阵与线性代数运算
需要执行矩阵和线性代数运算,比如矩阵乘法.寻找行列式.求解线性方程组等等. 矩阵类似于3.9 小节中数组对象,但是遵循线性代数的计算规则.下面的一个例子展示了矩阵的一些基本特性: >>&g ...
- 20145118 《Java程序设计》 实验报告一
实验一 JAVA开发环境的熟悉(LINUX + ECLIPSE) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 3.统计自己的P ...