luogu2331
P2331 [SCOI2005]最大子矩阵
题目描述
这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵不能相互重叠。
输入格式
第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的分值的绝对值不超过32767)。
输出格式
只有一行为k个子矩阵分值之和最大为多少。
输入输出样例
3 2 2
1 -3
2 3
-2 3
9 sol:dp[i][j][k]表示第一行匹配到i,第二行匹配到j,用了k个矩阵的最大值,XJB转移即可
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=; bool f=; char ch=' ';
while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}
while(isdigit(ch)) {s=(s<<)+(s<<)+(ch^); ch=getchar();}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<) {putchar('-'); x=-x;}
if(x<) {putchar(x+''); return;}
write(x/); putchar((x%)+'');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=,M=,inf=0x3f3f3f3f;
int n,m,c,ans=-inf;
int a[N][],S[][N],st[][N][];
int dp[N][N][M];
inline int cmin(int o,int a,int b)
{
return (S[o][a]<S[o][b])?a:b;
}
inline int ask(int o,int l,int r)
{
int oo=log2(r-l+);
return cmin(o,st[o][l][oo],st[o][r-(<<oo)+][oo]);
}
inline void Solve()
{
int i,j,k;
memset(dp,-,sizeof dp); dp[][][]=;
for(i=;i<=n;i++)
{
for(j=;j<=c;j++)
{
for(k=;k<=i-;k++)
{
dp[i][][j]=max(dp[i][][j],dp[k][][j-]+S[][i]-S[][ask(,k,i-)]);
dp[i][][j]=max(dp[i][][j],dp[k][][j]);
}
}
}
for(i=;i<=n;i++) ans=max(ans,dp[i][][c]);
Wl(ans);
}
int main()
{
freopen("data.in","r",stdin);
int i,j,k,l;
R(n); R(m); R(c); S[][]=S[][]=S[][]=;
for(i=;i<=n;i++)
{
S[m+][i]=S[m+][i-];
for(j=;j<=m;j++)
{
S[j][i]=S[j][i-]+(a[i][j]=read());
S[m+][i]+=a[i][j];
}
}
for(k=;k<=m+;k++)
{
for(j=;j<=n;j++) st[k][j][]=j;
for(i=;i<=;i++)
{
for(j=;j+(<<i)-<=n;j++) st[k][j][i]=cmin(k,st[k][j][i-],st[k][j+(<<(i-))][i-]);
}
}
if(m==) {Solve(); return ;}
// for(i=0;i<=n;i++) cout<<S[1][i]<<' '<<S[2][i]<<' '<<S[3][i]<<endl;
// for(i=0;i<=n;i++) for(j=i;j<=n;j++)
// {
// cout<<i<<" "<<j<<":"<<S[1][ask(1,i,j)]<<" "<<S[2][ask(2,i,j)]<<" "<<S[3][ask(3,i,j)]<<endl;
// }
memset(dp,-,sizeof dp); dp[][][]=;
for(i=;i<=n;i++) for(j=;j<=n;j++) for(k=;k<=c;k++)
{
if(i==&&j==) continue;
for(l=;l<=i-;l++)
{
dp[i][j][k]=max(dp[i][j][k],dp[l][j][k-]+S[][i]-S[][ask(,l,i-)]);
dp[i][j][k]=max(dp[i][j][k],dp[l][j][k]);
}
for(l=;l<=j-;l++)
{
dp[i][j][k]=max(dp[i][j][k],dp[i][l][k-]+S[][j]-S[][ask(,l,j-)]);
dp[i][j][k]=max(dp[i][j][k],dp[i][l][k]);
}
if(i==j)
for(l=;l<=i-;l++)
{
dp[i][j][k]=max(dp[i][j][k],dp[l][l][k-]+S[][i]-S[][ask(,l,i-)]);
dp[i][j][k]=max(dp[i][j][k],dp[l][l][k]);
}
}
// cout<<dp[1][1][1]<<' '<<dp[2][2][1]<<' '<<dp[2][2][2]<<' '<<dp[3][3][2]<<endl;
for(i=;i<=n;i++) for(j=;j<=n;j++) ans=max(ans,dp[i][j][c]);
Wl(ans);
return ;
}
luogu2331的更多相关文章
- luogu2331 [SCOI2005]最大子矩阵
题目大意 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠.1≤n≤100,1≤m≤2,1≤k≤10. 思路 #include < ...
- From 7.22 To 7.28
From 7.22 To 7.28 大纲 竞赛 我们好像要跟队爷考试... 考试的时候做题吧 学科 还是跟之前一样吧, 完型和阅读几乎没做过... 运动 踢足球!!!!!! 可惜bb他们去上海了... ...
随机推荐
- MySQL NULL 使用带来的坑
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...
- C++新特性---智能指针
智能指针: 为什么需要智能指针? 1. malloc出来的空间,没有进行释放,存在内存泄漏的问题. 2. 异常安全问题.如果在malloc和free之间如果存 ...
- (八)二进制文件在webservice中的处理(以byte[]字节数组方式)
一.介绍 二进制文件在webservice中的处理. A:通过byte[]字节数组的方式来传递.比较适合小文件,字节数组不能太大的情况.(本章所用) B:通过DataHander的方式来进行传递. 1 ...
- CCF 201709-1 打酱油
CCF 2017-09-1 打酱油 题目 问题描述 小明带着N元钱去买酱油.酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每买5瓶送2瓶.请问小明最多可以得到多少瓶酱油. 输入格式 输入的第一行 ...
- JFinal(2)JFinal 学习资料
JFinal 学习资料 :http://pan.baidu.com/s/1hsOcQ0G 密码:7lq3 , jfinal社区收费会员内部部分资料,博主网络搜集而来
- 验证 vector = 是深拷贝还是浅拷贝
#include <vector> using namespace std; int main() { int w=1920; int h = 1080; vector<int> ...
- 如何在 vue 2.0+ 中引入全局的stylus文件,且能正常
由于stylus在引用时,不能像一般的css文件直接在main.js中引用,就算引用了也会只能使用转换后的css,不能使用里面的函数,方法等,原因可能是:在这里引入会被直接编译成css,不能在别的模板 ...
- 【转载】salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable
salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable 本篇知识参考:https://developer.salesforce.com/trailhead/for ...
- .Net给图片加水印,并解决“无法从带有索引像素格式的图像创建Graphics对象”问题
using (Image img = Image.FromFile(savePath)) { //如果原图片是索引像素格式之列的,则需要转换 if (img.PixelFormat!=null) { ...
- vue中用div的contenteditable属性实现v-for遍历,双向数据绑定的动态表格编辑
1.HTML部分 <tr v-for="(item,index) in customerVisitList2" :key="index"> < ...