预处理+状态压缩+剪枝——codefoece 1209E
那一步剪枝实在是没想到
#include<bits/stdc++.h>
using namespace std;
#define N 2005 struct Col{
int MAX,a[],Max[<<];
}col[N];
int n,m,dp[][<<]; int cmp(Col &a,Col &b){return a.MAX>b.MAX;} inline int judge(int s,int ss){
for(int i=;i<;i++)
if(!(s>>i & ) && (ss>>i & ))return ;
return ;
}
vector<int>v[<<]; void init(){
memset(dp,,sizeof dp);
memset(col,,sizeof col);
} int main(){
int t;cin>>t; for(int i=;i<(<<);i++){
for(int j=;j<=i;j++)
if(judge(i,j))
v[i].push_back(j);
} //for(auto ss:v[3])cout<<ss<<" "; while(t--){
init();
cin>>n>>m;
for(int i=;i<n;i++)
for(int j=;j<m;j++){
scanf("%d",&col[j].a[i]);
col[j].MAX=max(col[j].MAX,col[j].a[i]);
} sort(col,col+m,cmp); m=min(m,n);//只要用到最大值最大的前n列即可 for(int j=;j<m;++j){
Col cur=col[j];
for(int p=;p<n;++p)
for(int s=;s<(<<n);++s){
int sum=;
for(int k=;k<n;++k)
if(s>>k & )sum+=cur.a[(p+k)%n];
col[j].Max[s]=max(col[j].Max[s],sum);
}
} for(int s=;s<(<<n);s++)
dp[][s]=col[].Max[s]; for(int j=;j<=m;j++){
for(int s=;s<(<<n);s++){
//for(int ss=0;ss<=s;ss++)if(judge(s,ss))//ss是s的子集
for(auto ss:v[s]){
//cout<<ss<<" ";
dp[j][s]=max(dp[j][s],dp[j-][s-ss]+col[j].Max[ss]);
}
//puts("");
}
} cout<<dp[m][(<<n)-]<<'\n';
}
}
预处理+状态压缩+剪枝——codefoece 1209E的更多相关文章
- Light OJ 1037 - Agent 47(预处理状态压缩DP)
题目大意: 有个特工要执行任务,他会遭遇到最多15个目标,特工必须把他们全部杀死.当他杀死一个目标后他可以使用目标的武器来杀死其他人.因此他必须有一个杀人的顺序,使得他开枪的次数最小. 现在给你一个表 ...
- 靶形数独 (dfs+预处理+状态压缩)
#2591. 「NOIP2009」靶形数独 [题目描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们 ...
- uva10160(dfs+状态压缩)
题意:给出n个点,以及m条边,这些边代表着这些点相连,修一个电力站,若在某一点修一个站,那么与这个点相连的点都可以通电,问所有的点都通电的话至少要修多少个电力站........ 思路:最多给出的是35 ...
- Sudoku (剪枝+状态压缩+预处理)
[题目描述] In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller 3 × 3 subgrids. ...
- uva 1601 poj 3523 Morning after holloween 万圣节后的早晨 (经典搜索,双向bfs+预处理优化+状态压缩位运算)
这题数据大容易TLE 优化:预处理, 可以先枚举出5^3的状态然后判断合不合法,但是由于题目说了有很多墙壁,实际上没有那么多要转移的状态那么可以把底图抽出来,然后3个ghost在上面跑到时候就不必判断 ...
- POJ2688状态压缩(可以+DFS剪枝)
题意: 给你一个n*m的格子,然后给你一个起点,让你遍历所有的垃圾,就是终点不唯一,问你最小路径是多少? 思路: 水题,方法比较多,最省事的就是直接就一个BFS状态压缩暴搜就行 ...
- 状态压缩---UVA6625 - Diagrams & Tableaux
比赛的时候刷出来的第一个状态DP.(期间有点没有把握是状态DP呢.) 题意:题意还是简单的.K行的方格.之后输入L1~LK 代表每一行方格数.在这些往左紧挨的方格子里填上1~N的数字. 其中右边格子的 ...
- ACM/ICPC 之 BFS+状态压缩(POJ1324(ZOJ1361))
求一条蛇到(1,1)的最短路长,题目不简单,状态较多,需要考虑状态压缩,ZOJ的数据似乎比POj弱一些 POJ1324(ZOJ1361)-Holedox Moving 题意:一条已知初始状态的蛇,求其 ...
- topcoder-srm701-div2-900 博弈\计算二进制位1的个数\dp\状态压缩
借用一下qls翻译过来的题面 现在有 n 个石子,A 和 B 轮流取石子,A先,每次最多可以取 m 个石子,取到最后一个石子的人获胜,但是某个人如果取完石子时候剩余石子数的二进制表示中有奇数个1,这 ...
随机推荐
- setTimeout()和setInterval()的用法及区别
setInterval 方法表示每间隔一段时间执行一次函数,会一直执行下去,除非手动 clearInterval 来停止. var i = 10; var timer = setInterval(() ...
- API登录验证
客户端 客户端token加在header头中,通过request发送给服务端 服务端 服务端 通过request.META.get(HTTP_TOKEN)拿到客户端传来的token 然后与服务器事先存 ...
- jdbc 数据库批处理insert操作
package blob; import java.sql.Connection; import java.sql.PreparedStatement; import jdbc.utils.*; // ...
- ShopNC多用户商城标题去版权 后台去版权方法2.0版本
一.前台标题: \framework\tpl\nc.php 第85行 $output['html_title'] = ( $output['html_title'] != "" ? ...
- [MySQL] 怎样使用Mysqlcheck来检查和修复, 优化表
mysqlcheck 是 MySQL 自带的一个工具,作用就是保养 表,其实就是检查,分析,修复和优化了.下面来介绍 mysqlcheck 工具的简单使用,官方文档在这里 原文网址:http://bl ...
- ZROI week2
\[ZROI week2\] 除草机 首先考虑最少的拐点肯定是那种螺旋形状的,然后手玩几个数据发现和列数(行数)有关,且每增加1就是上一个状态加2,直接\(O(1)\)公式即可 吐槽:为啥\(n,m\ ...
- API参考文档
Android 中文版:http://www.apiref.com/android-zh/index.html Bootstrap3 教程:http://www.apiref.com/bootstra ...
- mysql与python连接学习
1 问题: pip install MySQLClient 遇到 error: Microsoft Visual C++ 14.0 is required. Get it with "Mi ...
- JDK,JRE,JVM
jdk JDK是整个Java的核心,包括了Java运行环境(Java Runtime Environment),一堆Java工具和Java基础的类库(rt.jar).不论什么Java应用服务器,实质都 ...
- linux中errno及perror的应用
1 perror 定义在头文件<stdlib.h>中 void perror(const char *s);函数说明 perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 ...