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

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

用$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. BurpSuite 功能概览

    简介 写作思想:相比较具体介绍某个功能的用法.会更加侧重于介绍 Burp 提供哪些功能.这样好处是在比较复杂的测试场景,如果Burp 刚好提供对应的功能,就不用花费精力造轮子了. 而需要掌握具体操作方 ...

  2. WCF服务调用超时错误:套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:05:30”(已解决)

    问题: 线上正式环境调用WCF服务正常,但是每次使用本地测试环境调用WCF服务时长就是出现:套接字连接已中止.这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的.本地套接字超 ...

  3. 记一次 .NET 某招聘网后端服务 内存暴涨分析

    一:背景 1. 讲故事 前段时间有位朋友wx找到我,说他的程序存在内存阶段性暴涨,寻求如何解决,和朋友沟通下来,他的内存平时大概是5G 左右,在某些时点附近会暴涨到 10G+, 画个图大概就是这样. ...

  4. asp.net core使用identity+jwt保护你的webapi(三)——refresh token

    前言 上一篇已经介绍了identity的注册,登录,获取jwt token,本篇来完成refresh token. 开始 开始之前先说明一下为什么需要refresh token. 虽然jwt toke ...

  5. 高级爬虫面试题测试题 v1.3

    Python Web高级爬虫工程师测试题 (请本文件发送到: SpiderTestQuestion@163.com 并附带简历) 1. 用yield写一个斐波那契数列的生成器函数. 2. 放一段scr ...

  6. 利用python爬取全国水雨情信息

    分析 我们没有找到接口,所以打算利用selenium来爬取. 代码 import datetime import pandas as pd from bs4 import BeautifulSoup ...

  7. 微信h5跳转小程序wx-open-launch-weapp开放标签不显示(已解决)

    前言: 前几天成功对接了跳转第三方小程序的功能,今天有个页面有需要对接.但是奇怪的是用的和上次一模一样的配置,但就是死活不显示wx-open-launch-weapp这个开放标签的按钮,看不到任何效果 ...

  8. 【UE4 C++】 UDataAsset、UPrimaryDataAsset 的简单使用

    UDataAsset 简介 用来存储数据,每一个DataAsset 都是一份数据 可以派生,系统自带派生 UPrimaryDataAsset 方便数据对象的加载和释放 可以引用其他的 UDataAss ...

  9. 【c++ Prime 学习笔记】第3章 字符串、向量和数组

    string和vector是两类最重要的标准库类型 strng表示可变长的字符序列 vector存放某种给定类型对象的可变长序列. 3.1 命名空间的using声明 using namespace:: ...

  10. 生产环境部署springcloud微服务启动慢的问题排查

    今天带来一个真实案例,虽然不是什么故障,但是希望对大家有所帮助. 一.问题现象: 生产环境部署springcloud应用,服务部署之后,有时候需要10几分钟才能启动成功,在开发测试环境则没有这个问题. ...