[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 ...
随机推荐
- == 和 equals区别
== equals是两种字符串的方式 区别 == 是比较两个对象的引用地址值 equals是比较两个对象的具体内容 示例 package com.oop.demo06; public class De ...
- 深入思考软件工程,开启 DevOps 之旅
20 世纪 60 年代,软件开始脱离硬件,逐渐成为一个独立产业.至今,软件开发过程从瀑布模型.CMM/CMMI,到 20 年前敏捷的诞生,再到今天 DevOps 的火热,一代代软件人在思考和探索,如何 ...
- 教你 4 步搭建弹性可扩展的 WebAPI
作者 | 萧起 阿里云云原生团队 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 Se ...
- xshell连接VMware中的Linux
[前言]最近想压测一下ITOO的考试系统,所以想在自己电脑上安装一下linux,然后安装一下jmeter进行压测一下. 不过为什么要连接xshell呢,因为在虚拟机上总是会和主机切换鼠标,而且也不能粘 ...
- MySQL ENGINES 引擎
引擎 存储引擎是数据库底层软件组织. 数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据. 不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能. MySQL的核心就是存储引擎 ...
- 从0到1使用Kubernetes系列(三):使用Ansible安装Kubernetes集群
前两期的文章介绍了Kubernetes基本概念和架构,用Kubeadm+Ansible搭建Kubernetes集群所需要的工具及其作用.本篇介绍怎么使用Ansible安装Kubernetes集群. 启 ...
- Linux——Docker安装
1. 安装Docker i :环境准备:Linux要求内核3.0以上 ii:安装 #1.卸载旧版本 yum remove docker \ docker-client \ docker-client- ...
- 【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符
UFunction声明 UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数.UObject 或蓝图函数库可将成员函数声明为UFunction,方法是将 UFUNCTION 宏放在头文 ...
- 【UE4 设计模式】装饰器模式 Decorator Pattern
概述 描述 动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活.是一种对象结构型模式. 套路 抽象构件(Component) 具体构 ...
- 热身训练1 Sequence
http://acm.hdu.edu.cn/showproblem.php?pid=6 分析: 这道题,全都是1e9,所以我们很容易想到"矩阵快速幂". 假如说我们没有后面那个&q ...