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他们去上海了... ...
随机推荐
- 去除空格函数trim
实际查询中,经常存在多个tables,需要统一查询比如segments总大小或者索引或者主键等,我们得到大量的tables表名称,但是SQL查询,每次需要手工添加双引号,去除空格很麻烦. 可以通过文本 ...
- mysql5.7主主(双主)复制
在server1上操作 vi /etc/my.cnf 修改或添加下面这几行: server-id=1 log-bin=mysql-bin # 启用二进制日志 auto-increment-increm ...
- Flash播放控件属性详解
Flash 播放控件属性详解 一.属性篇 1.AlignMode(读写) 语法:AlignMode As Long 说明:对齐方式(与SAlign 属性联动).当控件的长宽比例与影片不一致且WMo ...
- map自定义键值类型
map自定义键值类型 改变Map的默认比较方式 https://www.cnblogs.com/zjfdlut/archive/2011/08/12/2135698.html 大家知道,STL中的ma ...
- leetcode-88. 合并两个有序数组 · Aaray
题面 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 样例 1. 输入: nums1 = [1,2,3,0,0,0], m ...
- 6.Redis的事务
Redis的事务(Redis部分支持事务) a)是什么 可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞 b)能干吗 一个( ...
- 【Distributed】网站跨域解决方案
一.概述 1.1 什么是网站跨域 1.2 网站跨域报错案例 二.五种网站跨域解决方案 三.使用JSONP解决网站跨域[1] 3.1 前端代码 3.2 后端代码 四.使用设置响应头允许跨域[2] 4.1 ...
- 第三章 Django之动态网页基础(1)
前一章中,我们解释了如何建立一个 Django 项目并启动 Django 开发服务器.当然,那个网站实际并没有干什么有用的事情,它所做的只是显示 It worked!消息.让我们来做些改变.本章将介绍 ...
- 日志实时查看、轮询、统计、监控工具 Loggrove
Loggrove 是对日志文件进行 阅读.轮询.关键词匹配.监控告警.图表展示 的 Web 服务. 下载地址 https://github.com/olajowon/loggrove 超轻组件 Pyt ...
- Linux命令——shutdown、halt、poweroff、reboot、cal、date
shutdown shutdown在关机的时候会通知所有用户 shutdown –r now 现在重启 shutdown now 现在关机 shutdown +5 过5分钟关机 shutdown –c ...