题意也可以理解为这样一个过程:

对于每一列,将其旋转后选出若干行上的数,要求与之前的行都不同

用$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的更多相关文章

  1. Codeforces Round #584 E2. Rotate Columns (hard version)

    链接: https://codeforces.com/contest/1209/problem/E2 题意: This is a harder version of the problem. The ...

  2. codeforces#1290E2 - Rotate Columns (hard version)(子集dp)

    题目链接: https://codeforces.com/contest/1209/problem/E2 题意: 给出$n$行和$m$列 每次操作循环挪动某列一次 可以执行无数次这样的操作 让每行最大 ...

  3. Codeforces 1209E2. Rotate Columns (hard version)

    传送门 发现 $n$ 很小,考虑状压 $dp$,但是如果强行枚举列并枚举置换再转移复杂度太高了 考虑推推结论,发现我们只要保留列最大值最大的 $n$ 列即可,证明好像挺显然: 假设我们让列最大值比较小 ...

  4. Codeforces Round #584

    传送门 A. Paint the Numbers 签到. Code #include <bits/stdc++.h> using namespace std; typedef long l ...

  5. Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)

    怎么老是垫底啊. 不高兴. 似乎 A 掉一道题总比别人慢一些. A. Paint the Numbers 贪心,从小到大枚举,如果没有被涂色,就新增一个颜色把自己和倍数都涂上. #include< ...

  6. Rotate partitions in DB2 on z

    Rotating partitions   You can use the ALTER TABLE statement to rotate any logical partition to becom ...

  7. rotate the clock

    A program test: You are given N round clocks. Every clock has M hands, and these hands can point to ...

  8. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

  9. JQuery Datatables Columns API 参数详细说明

    ---恢复内容开始--- Data Tables: http://datatables.NET/ Version: 1.10.0 Columns说明 虽然我们可以通过DOM直接获取DataTables ...

随机推荐

  1. 从零入门 Serverless | 一文详解 Serverless 技术选型

    作者 | 李国强 阿里云资深产品专家 今天来讲,在 Serverless 这个大领域中,不只有函数计算这一种产品形态和应用类型,而是面向不同的用户群体和使用习惯,都有其各自适用的 Serverless ...

  2. 从零入门 Serverless | 教你使用 IDE/Maven 快速部署 Serverless 应用

    作者 | 许成铭(竞霄) 阿里云开发工程师 SAE 应用部署方式 1. SAE 概述 首先,简单介绍一下 SAE.SAE 是一款面向应用的 Serverless PaaS 平台,支持 Spring C ...

  3. React Native之新架构中的Turbo Module实现原理分析

    有段时间没更新博客了,之前计划由浅到深.从应用到原理,更新一些RN的相关博客.之前陆续的更新了6篇RN应用的相关博客(传送门),后边因时间问题没有继续更新.主要是平时空余时间都用来帮着带娃了,不过还是 ...

  4. CF123E Maze(期望dp,树形dp,式子)

    题目大意: 给你一棵树,边权都是1,每一个点有一个是起点的概率和一个是终点的概率,你将以起点为根,开始在树上随机dfs,每到一个点,就会将他的所有儿子随机打乱成序列,然后按照那个随机顺序走完,直到走到 ...

  5. springboot事务的传播行为和隔离级别

    springboot事务的传播行为和隔离级别 在springboot中事务的传播行为和隔离级别都是在TransactionDefinition这个接口中定义的 传播行为定义了7种,分别用0-6来表示 ...

  6. Mybatis初始化机制

    对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置 ...

  7. paramiko远程控制host执行脚本的用法

    import paramiko ssh = paramiko.SSHClient() print ssh.get_host_keys() ssh.set_missing_host_key_policy ...

  8. LeetCode:并查集

    并查集 这部分主要是学习了 labuladong 公众号中对于并查集的讲解,文章链接如下: Union-Find 并查集算法详解 Union-Find 算法怎么应用? 概述 并查集用于解决图论中「动态 ...

  9. OO第四次博客作业--第四单元总结及课程总结

    一.总结第四单元两次作业的架构设计 1.1 第一次作业 类图如下: 为了突出类.接口.方法.属性.和参数之间的层次结构关系,我为 Class 和 Interface 和 Operation 分别建立了 ...

  10. linux下命令拼接

    前言:我个five,一道特别简单的拼接题没有做出来,我吐了,不过也是涨知识了 直接切入正题了 linux命令是可以拼接的,也就是说在一个system("???")下我们的???可以 ...