[cf1209E]Rotate Columns
题意也可以理解为这样一个过程:
对于每一列,将其旋转后选出若干行上的数,要求与之前的行都不同
用$g_{i,S}$表示第$i$列选出的行数集合为$S$的最大和,$f_{i,S}$表示前$i$列$S$中的行已经选择的最大和,转移通过枚举子集,复杂度为$o(Qm3^{n})$
关于$g_{i,S}$的计算可以先预处理$sum_{i,S}$表示第$i$列$S$这些行的和(不旋转),接下来枚举旋转,用二进制简单维护,复杂度为$o(Qnm2^{n})$
(代码中利用的是找到其最小表示法,并直接从最小表示法处转移,如果定义轮换相同,则本质不同的串根据polya定理大约为$o(\frac{2^{n}}{n})$,暴力$o(n^{2})$统计复杂度相同)
进一步的,只需要选择最大值最大的$n$列(相同任取)即可,如果在另外一列选择,那么这$n$列中一定有一个列被选择,同时那一列中可以任意旋转,用该列最大值来替换这“另外一列”一定不劣
最终时间复杂度为$o(Qn3^{n}+Qn^{2}2^{n})$,可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 12
4 #define M 2005
5 int t,n,m,a[M][N],mx[1<<N],f[N+5][1<<N];
6 pair<int,int>b[M];
7 int main(){
8 scanf("%d",&t);
9 while (t--){
10 scanf("%d%d",&n,&m);
11 for(int i=0;i<n;i++)
12 for(int j=1;j<=m;j++)scanf("%d",&a[j][i]);
13 for(int i=1;i<=m;i++){
14 b[i].first=0;
15 for(int j=0;j<n;j++)b[i].first=max(b[i].first,a[i][j]);
16 b[i].first*=-1;
17 b[i].second=i;
18 }
19 sort(b+1,b+m+1);
20 m=min(n,m);
21 for(int ii=1;ii<=m;ii++){
22 int i=b[ii].second;
23 for(int j=0;j<(1<<n);j++){
24 mx[j]=0;
25 int s=j;
26 for(int k=1;k<n;k++)s=min(s,(j>>k)+((j&((1<<k)-1))<<(n-k)));
27 if (s==j){
28 for(int k=0;k<n;k++){
29 int s=0;
30 for(int l=0;l<n;l++)
31 if (j&(1<<l))s+=a[i][(k+l)%n];
32 mx[j]=max(mx[j],s);
33 }
34 }
35 else mx[j]=mx[s];
36 }
37 for(int j=0;j<(1<<n);j++){
38 f[ii][j]=0;
39 for(int k=j;;k=((k-1)&j)){
40 f[ii][j]=max(f[ii][j],f[ii-1][k]+mx[j^k]);
41 if (!k)break;
42 }
43 }
44 }
45 printf("%d\n",f[m][(1<<n)-1]);
46 }
47 return 0;
48 }
[cf1209E]Rotate Columns的更多相关文章
- Codeforces Round #584 E2. Rotate Columns (hard version)
链接: https://codeforces.com/contest/1209/problem/E2 题意: This is a harder version of the problem. The ...
- codeforces#1290E2 - Rotate Columns (hard version)(子集dp)
题目链接: https://codeforces.com/contest/1209/problem/E2 题意: 给出$n$行和$m$列 每次操作循环挪动某列一次 可以执行无数次这样的操作 让每行最大 ...
- Codeforces 1209E2. Rotate Columns (hard version)
传送门 发现 $n$ 很小,考虑状压 $dp$,但是如果强行枚举列并枚举置换再转移复杂度太高了 考虑推推结论,发现我们只要保留列最大值最大的 $n$ 列即可,证明好像挺显然: 假设我们让列最大值比较小 ...
- Codeforces Round #584
传送门 A. Paint the Numbers 签到. Code #include <bits/stdc++.h> using namespace std; typedef long l ...
- Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)
怎么老是垫底啊. 不高兴. 似乎 A 掉一道题总比别人慢一些. A. Paint the Numbers 贪心,从小到大枚举,如果没有被涂色,就新增一个颜色把自己和倍数都涂上. #include< ...
- Rotate partitions in DB2 on z
Rotating partitions You can use the ALTER TABLE statement to rotate any logical partition to becom ...
- rotate the clock
A program test: You are given N round clocks. Every clock has M hands, and these hands can point to ...
- Canvas绘图之平移translate、旋转rotate、缩放scale
画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...
- JQuery Datatables Columns API 参数详细说明
---恢复内容开始--- Data Tables: http://datatables.NET/ Version: 1.10.0 Columns说明 虽然我们可以通过DOM直接获取DataTables ...
随机推荐
- Windows下的程序及热键监视神器——Spy++
Windows下的程序及热键监视神器--Spy++ 背景 在使用Windows的时候,偶尔会发现某些应用程序的热键不生效了:又或是桌面弹出了弹框却并不知道这个弹框来自何处.例如,本人最近使用Vim的时 ...
- CF49E Common ancestor(dp+dp+dp)
纪念卡常把自己卡死的一次自闭模拟赛 QWQ 一开始看这个题,以为是个图论,仔细一想,貌似可以直接dp啊. 首先,因为规则只有从两个变为1个,貌似可以用类似区间\(dp\)的方式来\(check\)一段 ...
- python中return的返回和执行
1 打印函数名和打印函数的执行过程的区别 例子1.1 def a(): print(111) print(a) # 打印a函数的内存地址,不会对a函数有影响,a函数不会执行 print(a()) # ...
- 一次简单的SQL注入绕WAF
本人也是小白一枚,大佬请绕过,这个其实是六月份的时候做的,那时候想多点实战经验,就直接用谷歌搜索找了一些网站,这个是其中一个 1.目标网站 2.发现有WAF防护 3.判断存在注入 4.猜测了一下闭合为 ...
- 【Java技术专题】「性能优化系列」针对Java对象压缩及序列化技术的探索之路
序列化和反序列化 序列化就是指把对象转换为字节码: 对象传递和保存时,保证对象的完整性和可传递性.把对象转换为有字节码,以便在网络上传输或保存在本地文件中: 反序列化就是指把字节码恢复为对象: 根据字 ...
- 【数据结构与算法Python版学习笔记】基本数据结构——列表 List,链表实现
无序表链表 定义 一种数据项按照相对位置存放的数据集 抽象数据类型无序列表 UnorderedList 方法 list() 创建一个新的空列表.它不需要参数,而返回一个空列表. add(item) 将 ...
- 改善深层神经网络-week2编程题(Optimization Methods)
1. Optimization Methods Gradient descent goes "downhill" on a cost function \(J\). Think o ...
- [no code][scrum meeting] Beta 3
$( "#cnblogs_post_body" ).catalog() 例会时间:5月15日11:30,主持者:肖思炀 下次例会时间:5月16日11:30,主持者:伦泽标 一.工作 ...
- 【二食堂】Beta - Scrum Meeting 4
Scrum Meeting 4 例会时间:5.17 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 继续完成文本区域划词添加的功能 issue 1. 划词功能已经实现,继续开发 ...
- makedown笔记
makedown语法 表格 这个表格的主题 |姓名|性别|年龄|职业| | ----- | ----- | ----- | ----- | |张三|男|34|码农| |李四|男|27|代驾| 这个表格 ...