CF1209题解
E
每列都可以沿下滚动若干次,使得各行最大值之和最大
对每列的元素计算最大值,降序排,显然取前\(min(n,m)\)个列处理即可
比较巧妙的动规,设\(f(i,S)\)为前\(i\)列,已经确定最大值集合为\(S\)的其集合的最大值\((\)通俗讲,对于每列,二进制枚举该列设定为最大值的行位置,该行其他值便不需要管了\()\)
考虑类似于背包的转换,对于每个\(S\),填表法去填一个空位置,\(S\)从小到大枚举,即可
细节:滚动数组处理
#include<bits/stdc++.h>
typedef int LL;
const LL maxn=13,maxm=2e3+9;
inline LL Read(){
LL x(0),f(1); char c=getchar();
while(c<'0' || c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0' && c<='9'){
x=(x<<3)+(x<<1)+c-'0'; c=getchar();
}return x*f;
}
struct node{
LL x,id;
}M[maxm];
LL T;
LL a[maxn][maxm],f[1<<maxn],g[1<<maxn],tmp[1<<maxn],fg[maxm],pos[1<<maxn];
inline bool cmp(node xx,node yy){
return xx.x>yy.x;
}
inline LL Lowbit(LL x){
return x&(-x);
}
inline void Solve(LL n,LL m){
for(LL i=1;i<=m;++i) M[i]=(node){0,i},fg[i]=0;
for(LL i=1;i<=n;++i){
for(LL j=1;j<=m;++j){
a[i][j]=Read();
M[j].x=std::max(M[j].x,a[i][j]);
}
}
for(LL i=0;i<n;++i) pos[1<<i]=i+1;
std::sort(M+1,M+1+m,cmp);
for(LL i=1;i<=n && i<=m;++i)
fg[M[i].id]=1;//,printf("%d ",M[i].id); puts("");
LL Len(1<<n);
for(LL i=0;i<Len;++i) f[i]=0;
for(LL i=1;i<=m;++i){
if(!fg[i]) continue;
for(LL bit=0;bit<Len;++bit) tmp[bit]=0;
for(LL j=1;j<=n;++j){
for(LL bit=0;bit<Len;++bit) g[bit]=f[bit];
for(LL bit=0;bit<Len;++bit){
LL p(Len-1^bit);
while(p){
LL x(Lowbit(p)); LL nw(pos[x]);
g[bit|x]=std::max(g[bit|x],g[bit]+a[nw][i]);
p-=x;
}
}
LL tp(a[1][i]); for(LL k=1;k<n;++k) a[k][i]=a[k+1][i]; a[n][i]=tp;
for(LL bit=0;bit<Len;++bit) tmp[bit]=std::max(tmp[bit],g[bit]);
}
for(LL bit=0;bit<Len;++bit) f[bit]=tmp[bit];
}
printf("%d\n",f[Len-1]);
}
int main(){
T=Read();
while(T--){
LL n(Read()),m(Read());
Solve(n,m);
}
return 0;
}/*
3
2 3
2 5 7
4 2 4
3 6
4 1 5 2 10 4
8 6 6 4 9 10
5 4 9 5 8 7
3 3
9 9 9
1 1 1
1 1 1
*/
F
路径拆成单字符,多层图跑最短路
CF1209题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- PHP利用preg_split函数格式化日期
// 2018/2/13 00:26:00.000 function format_date($date, $format='Y-m-d H:i:s') { if(empty($date)) retu ...
- iPhone的xib与iPad的xib相互转换
1. xib转换 iPhone版本APP开发完成后需要再开发iPad版本的APP,需要把iPhone版本的xib文件添加到iPad项目中去,但是Xcode中iPhone和iPad使用的xib格式不能完 ...
- 部署---Apache服务器安装SSL证书
在云服务器的证书控制台下载Apache版本证书,下载到本地的是一个压缩文件. 解压后里面包含: _public.crt文件是证书文件, _chain.crt是证书链(中间证书)文件, .key文件是证 ...
- layui 多个文件上传控件 整合缩减代码
// 图片上传 upload.render({ elem: '.upload-img' // 点击上传的按钮统一使用该类 ,url: "{:url('image/upload')}" ...
- Python——迭代器&可迭代对象
可迭代对象 什么是对象: Python中,一切皆对象.一个变量,一个列表,一个字符串,文件句柄,函数等等都可称为一个对象.一个对象就是一个实例,就是实实在在的东西. 什么是迭代 迭代就是一个重复的过程 ...
- django后台xadmin如下配置(小结)
django-admin文档:https://xadmin.readthedocs.io/en/latest/index.html目录: 1.xadmin基本配置 2.配置后台显示的模型类 3.后台注 ...
- Linux中通过ssh将客户端与服务端的远程连接
前提需要:1.在VMware中装上两台linux虚拟机,本博客使用的都是CentOS 7.2.两部虚拟机可以通过命令ping通.3.两部虚拟机中已经通过yum本地仓库安装了sshd服务. 首先 1. ...
- Linux操作系统的文件查找工具locate和find命令常用参数介绍
Linux操作系统的文件查找工具locate和find命令常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.非实时查找(数据库查找)locate工具 locate命 ...
- APS实现的要点与难点
在前一篇关于文章中讨论了不同层级.粒度的生产计划,在各行业中受重视程度的差异问题. 承蒙大家热烈讨论.本文则在收集各方高见的基础上,对于供应链上各个环节的运营.生产计划再作稍微深入一点的探讨.本文将列 ...
- LG5487 【模板】线性递推+BM算法
[模板]线性递推+BM算法 给出一个数列 \(P\) 从 \(0\) 开始的前 \(n\) 项,求序列 \(P\) 在\(\bmod~998244353\) 下的最短线性递推式,并在 \(\bmod~ ...