正题


题目大意

若干根棍子,不能折,不能多余求能够组成的最大长方形。


解题思路

首先我们发现如果棍子集合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,状压】相关推荐

  1. 【vijos P1914】【codevs 3904】[NOIP2014 普及组T4]子矩阵(dfs+状压dp)

    P1914子矩阵 Accepted 标签:NOIP普及组2014[显示标签] 描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与 列的相对顺序)被称为原矩阵 ...

  2. POJ 1321 棋盘问题(DFS 状压DP)

    用DFS写当然很简单了,8!的复杂度,16MS搞定. 在Discuss里看到有同学用状态压缩DP来写,就学习了一下,果然很精妙呀. 状态转移分两种,当前行不加棋子,和加棋子.dp[i][j]中,i代表 ...

  3. hdu 6149 Valley Numer II(01背包套状压dp)

    题目链接:hdu 6149 Valley Numer II 题意: 给你N个点,有k个为高点,其他为低点,现在这N个点有m条边,问你最多能组成多少个两个高点一个低点,低点和两个高点都有边相连这样的状态 ...

  4. 翻牌游戏(dfs/状压/暴力)

    此题来源于同学笔试腾讯的一个题. 有nnn张卡牌,第iii张正面为aia_iai​,反面为bib_ibi​,一开始所有牌都正面朝上,现在可以执行若干操作,每次操作可以选择相邻的牌,交换位置,再翻转它们 ...

  5. 【Codeforces Gym - 101635C Macarons 】【矩阵快速幂+状压】【dfs时间换空间】

    [链接] http://codeforces.com/gym/101635/attachments [题意] 求用1*1,1*2的方格填n*m的矩阵的方法数 [知识点] 状压dfs+矩阵快速幂 [分析 ...

  6. 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs

    http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...

  7. [状压dp][dfs] Jzoj P2679 跨时代

    Description 钟逆时针而绕,恶物狰狞的倾巢,我谦卑安静地于城堡下的晚祷,压抑远古流窜的蛮荒暗号,而管风琴键高傲的说,那只是在徒劳.我的乐器在环绕,时代无法淘汰我霸气的皇朝. 你无法预言,因为 ...

  8. [SDOI2008]山贼集团【树上背包+状压】

    洛谷P2465 SOL 比较经典的一类树上背包问题套一个子集状压枚举. 注意到代价的计算与所选的点的集合有关,如果我们要统计代价需要状压记录点集,而数据范围非常配合的给了P≤12P\le12P≤12, ...

  9. 2018/8/9 MultiU 6 并查集+dfs,反向建边提高查询效率 !!! / 最大字段和n维(降维)/ 状压+中途相遇法...

    hdu6370 Werewolf http://acm.hdu.edu.cn/showproblem.php?pid=6370 题意:村民只能说真话,狼人"可以"撒谎,每个人说一句 ...

最新文章

  1. shell脚本学习之参数传递
  2. 空调自控系统基础知识及应用
  3. mysql服务2013错误_错误2013(HY000):在“读取授权数据包”时丢失与MySQL服务器的连接,系统错误:0...
  4. 中国计算机应用大会2021,第二届机器学习与计算机应用国际学术会议(ICMLCA 2021)...
  5. 6425C-Lab3 管理用户与服务帐户(1)
  6. 【Lingo】lingo使用
  7. js 实现html网页简繁体切换
  8. (小白鼠喝药问题)1000瓶药水,其中有一瓶是有毒的,如何找出有毒的药水?
  9. java翻译程序_有没有java代码翻译软件?
  10. 2008最佳显微照片公布
  11. pythonascii怎么转换字符串_Python 十六进制整数与ASCii编码字符串相互转换方法
  12. 华为ensp的OSPF 基本配置
  13. 一个逐渐完善的万能table(一)
  14. 塔式服务器内存升级记录
  15. synergy一个鼠标控制多个电脑,synergy怎么用?synergy配置教程
  16. 专题---讨论IGBT驱动电路[转子电源网]
  17. matlab cosd,cos,acos,acosd
  18. 实验吧之【拐弯抹角】(url伪静态)
  19. pycharm + github实现多台电脑代码同步 (win系统)
  20. C++:静态成员函数访问静态数据成员(商店实际应用题)

热门文章

  1. 计算机专业考研末流211和双非,211大学考985研究生难吗,如何看待本科985学生读研去211学校?...
  2. Java连续获取两个输入,java 获取控制台的输入的两个方法
  3. php数字转中文数字排序,php实现中文转数字
  4. python对象_查找Python对象具有的方法
  5. java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能
  6. mysql数据库密码错误_MySQL数据库经典错误六 数据库密码忘记的问题
  7. mysql数据库5120_超傻瓜 H3C S5120 限速配置
  8. java 传送解析8583报文_java发送ISO8583报文接口案例
  9. 机器学习之数据预处理——特征编码(标签编码,独热编码)
  10. 单片机C语言中空语句,单片机C语言中的空语句.doc