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 & ...
 
随机推荐
- PKCS 标准
			
PKCS 标准 The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请.证书更新.证书 ...
 - 那些年,Linus torvalds大神喷过的技术
			
Linus Torvalds 被认为是最伟大的程序员之一,因为他写出了使用最广泛的软件,如 Linux 内核和 Git 版本控制系统.但是他这个人经常因为讲话带有情绪,甚至是因为带有脏话的意见而饱受非 ...
 - net webapi jwt验证授权
			
参考文章:https://blog.csdn.net/liwan09/article/details/83820651
 - DBA面对新mysql环境
			
来源:http://blog.csdn.net/wyzxg/article/details/8491152 author:skatetime:2013/01/10 DBA面对新MySQL环境感悟 1. ...
 - mysql学习之基础篇03
			
我们今天来进行建表的基本操作: 首先要建表就要了解列类型,因为建表就是声明列的过程,列声明完成了,表也就建好了. mysql中列分为三大类: 一.数值型 数值型又分为整型和浮点型两种. 先来看整型: ...
 - PTA-多项式A除以B
			
多项式A除以B 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出一个非零多项式,先给出A, ...
 - CentOS7怎样安装MySQL5.7.22
			
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm下载mysql源安装包 yum install mysq ...
 - 最小哈希 minhash
			
最小哈希 维基百科,自由的百科全书 跳到导航跳到搜索 在计算机科学领域,最小哈希(或最小哈希式独立排列局部性敏感哈希)方法是一种快速判断两个集合是否相似的技术.这种方法是由Andrei Bro ...
 - 一种使用gitlab的CI/CD功能实现Nginx配置更新的方法
			
至于nginx的docker制作,前面已介绍过. 现在使用gitlab在线编辑的方式,可实现Nginx的自定义配置并更新. .gitlab-ci.yml内容如下: variables: project ...
 - Java精通并发-synchronized关键字原理详解
			
关于synchronized关键字原理其实在当时JVM的学习[https://www.cnblogs.com/webor2006/p/9595300.html]中已经剖析过了,这里从研究并发专题的角度 ...