jzoj2679-跨时代【背包,dfs,状压】
正题
题目大意
若干根棍子,不能折,不能多余求能够组成的最大长方形。
解题思路
首先我们发现如果棍子集合SSS长度为lll且它有子集GGG长度为l2\frac{l}{2}2l那么就表示这个集合的棍子可以作为一个矩形的对应两边,这样我们只要枚举两个不相交集合作为长宽就好了。
我们设gig_igi表示二进制表示的集合iii十分可以折半。我们预处理ggg数组,对于每个集合,我们做一个背包预处理就好了。
然后dfsdfsdfs那些边作为长,那些边做宽就可以了。
时间复杂度:O(2nnl+3n)O(2^nnl+3^n)O(2nnl+3n)
但实际上远远达不到这个复杂度
codecodecode
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a[20],MS,f[3000],g[1<<17],ans;
void dfs(int dep,int c1,int c2,int len,int wigh)
{if(len*wigh>ans&&g[c1]&&g[c2])ans=len*wigh;if(dep>n) return;dfs(dep+1,c1|(1<<dep),c2,len+a[dep],wigh);dfs(dep+1,c1,c2|(1<<dep),len,wigh+a[dep]);dfs(dep+1,c1,c2,len,wigh);
}
int main()
{scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);MS=1<<n;for(int i=1;i<MS;i++){memset(f,0,sizeof(f));int sum=0;f[0]=1;for(int j=0;j<n;j++)if(i&(1<<j)) sum+=a[j];if(sum%2) continue;for(int j=0;j<n;j++)if(i&(1<<j)){for(int k=sum/2;k>=a[j];k--)f[k]|=f[k-a[j]];}if(f[sum/2]) g[i]=1;}dfs(0,0,0,0,0);if(!ans) printf("No Solution");else printf("%d",ans/4);
}
jzoj2679-跨时代【背包,dfs,状压】相关推荐
- 【vijos P1914】【codevs 3904】[NOIP2014 普及组T4]子矩阵(dfs+状压dp)
P1914子矩阵 Accepted 标签:NOIP普及组2014[显示标签] 描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与 列的相对顺序)被称为原矩阵 ...
- POJ 1321 棋盘问题(DFS 状压DP)
用DFS写当然很简单了,8!的复杂度,16MS搞定. 在Discuss里看到有同学用状态压缩DP来写,就学习了一下,果然很精妙呀. 状态转移分两种,当前行不加棋子,和加棋子.dp[i][j]中,i代表 ...
- hdu 6149 Valley Numer II(01背包套状压dp)
题目链接:hdu 6149 Valley Numer II 题意: 给你N个点,有k个为高点,其他为低点,现在这N个点有m条边,问你最多能组成多少个两个高点一个低点,低点和两个高点都有边相连这样的状态 ...
- 翻牌游戏(dfs/状压/暴力)
此题来源于同学笔试腾讯的一个题. 有nnn张卡牌,第iii张正面为aia_iai,反面为bib_ibi,一开始所有牌都正面朝上,现在可以执行若干操作,每次操作可以选择相邻的牌,交换位置,再翻转它们 ...
- 【Codeforces Gym - 101635C Macarons 】【矩阵快速幂+状压】【dfs时间换空间】
[链接] http://codeforces.com/gym/101635/attachments [题意] 求用1*1,1*2的方格填n*m的矩阵的方法数 [知识点] 状压dfs+矩阵快速幂 [分析 ...
- 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs
http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...
- [状压dp][dfs] Jzoj P2679 跨时代
Description 钟逆时针而绕,恶物狰狞的倾巢,我谦卑安静地于城堡下的晚祷,压抑远古流窜的蛮荒暗号,而管风琴键高傲的说,那只是在徒劳.我的乐器在环绕,时代无法淘汰我霸气的皇朝. 你无法预言,因为 ...
- [SDOI2008]山贼集团【树上背包+状压】
洛谷P2465 SOL 比较经典的一类树上背包问题套一个子集状压枚举. 注意到代价的计算与所选的点的集合有关,如果我们要统计代价需要状压记录点集,而数据范围非常配合的给了P≤12P\le12P≤12, ...
- 2018/8/9 MultiU 6 并查集+dfs,反向建边提高查询效率 !!! / 最大字段和n维(降维)/ 状压+中途相遇法...
hdu6370 Werewolf http://acm.hdu.edu.cn/showproblem.php?pid=6370 题意:村民只能说真话,狼人"可以"撒谎,每个人说一句 ...
最新文章
- shell脚本学习之参数传递
- 空调自控系统基础知识及应用
- mysql服务2013错误_错误2013(HY000):在“读取授权数据包”时丢失与MySQL服务器的连接,系统错误:0...
- 中国计算机应用大会2021,第二届机器学习与计算机应用国际学术会议(ICMLCA 2021)...
- 6425C-Lab3 管理用户与服务帐户(1)
- 【Lingo】lingo使用
- js 实现html网页简繁体切换
- (小白鼠喝药问题)1000瓶药水,其中有一瓶是有毒的,如何找出有毒的药水?
- java翻译程序_有没有java代码翻译软件?
- 2008最佳显微照片公布
- pythonascii怎么转换字符串_Python 十六进制整数与ASCii编码字符串相互转换方法
- 华为ensp的OSPF 基本配置
- 一个逐渐完善的万能table(一)
- 塔式服务器内存升级记录
- synergy一个鼠标控制多个电脑,synergy怎么用?synergy配置教程
- 专题---讨论IGBT驱动电路[转子电源网]
- matlab cosd,cos,acos,acosd
- 实验吧之【拐弯抹角】(url伪静态)
- pycharm + github实现多台电脑代码同步 (win系统)
- C++:静态成员函数访问静态数据成员(商店实际应用题)
热门文章
- 计算机专业考研末流211和双非,211大学考985研究生难吗,如何看待本科985学生读研去211学校?...
- Java连续获取两个输入,java 获取控制台的输入的两个方法
- php数字转中文数字排序,php实现中文转数字
- python对象_查找Python对象具有的方法
- java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能
- mysql数据库密码错误_MySQL数据库经典错误六 数据库密码忘记的问题
- mysql数据库5120_超傻瓜 H3C S5120 限速配置
- java 传送解析8583报文_java发送ISO8583报文接口案例
- 机器学习之数据预处理——特征编码(标签编码,独热编码)
- 单片机C语言中空语句,单片机C语言中的空语句.doc