这里有一个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的更多相关文章

  1. [bzoj1084][SCOI2005]最大子矩阵_动态规划_伪·轮廓线dp

    最大子矩阵 bzoj-1084 SCOI-2005 题目大意:给定一个n*m的矩阵,请你选出k个互不重叠的子矩阵使得它们的权值和最大. 注释:$1\le n \le 100$,$1\le m\le 2 ...

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

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

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

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

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

  5. [bzoj1084][SCOI2005]最大子矩阵(DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1084 分析: m=1时:相当于只有一行数,让你取出p段,使得总和最大 明显可以DP,f ...

  6. BZOJ1084 [SCOI2005]最大子矩阵 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1084 题意概括 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注 ...

  7. bzoj1084: [SCOI2005]最大子矩阵

    dp.状态转移方程在代码里 #include<cstdio> #include<algorithm> #include<cstring> using namespa ...

  8. BZOJ1084 SCOI2005最大子矩阵

    考虑DP f[i][j][k]表示一行到i一行到j共取k块最大值,类似于最长公共子序列n^2那种 注意相等时可以一起拿 By:大奕哥 #include<bits/stdc++.h> usi ...

  9. bzoj1084 [SCOI2005]最大子矩阵——背包

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1084 水题...分类讨论一下即可. 代码如下: #include<iostream&g ...

随机推荐

  1. 网站微图标,页标签,favicon.ico

    随便打开一个网页:比如 http://www.baidu.com/ 可以看到在浏览器的标签头上面显示了一个图标,也就是我们常说的favicon.ico, 由于这篇文章主要讨论favicon.ico,以 ...

  2. Sublime 取消每次自动更新弹窗设置

    首选项 --> 设置-用户(英文版  :  "Preferences  - -> "Settings - user"") update_check ...

  3. poj2411 Mondriaan's Dream【状压DP】

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 20822   Accepted: 117 ...

  4. Rancher OS

    Rancher OS 是生产规模中运行 Docker 最小,最简单的方式.RancherOS 的所有东西都作为 Docker 管理的容器.这些系统服务包括 udev 和 rsyslog.Rancher ...

  5. SQLAlchemy中scoped_session实现线程安全

    不多说,先上代码 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalchem ...

  6. poi根据模板导出word文档

    POI结构与常用类 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI ...

  7. Flask系列(三)蓝图、基于DButils实现数据库连接池、上下文管理

    知识点回顾 1.子类继承父类的三种方式 class Dog(Animal): #子类 派生类 def __init__(self,name,breed, life_value,aggr): # Ani ...

  8. springboot 使用model重定向到html模板,对数据进行展示

    1:使用springboot, ,html使用thymeleaf,nekohtml模板 在build.gradle中添加依赖 buildscript { repositories { mavenCen ...

  9. 命令行下开启与关闭windows防火墙关端口(转)

    sc config sharedaccess start= auto //设置防火墙服务为自动 net start sharedaccess //开启防火墙服务 关闭端口 netsh firewall ...

  10. Git 系列——第一步安装 Git

    之前也没有用过什么版本控制的工具,唯一用过的就是 SVN 了,不过也只是简单的使用而已,比如写好代码就签入,没了?是的,没了. 于是接触到了 Git 这个分布式版本控制软件,接下来就让我们好好学习,天 ...