正题


题目大意

有长方体积木nnn块,求能搭成的最高高度。


解题思路

考虑状态压缩,设fs,i,jf_{s,i,j}fs,i,j​表示积木使用状态为sss,最下面的是第iii块,状态为jjj:

状态:对于一个长方体a,b,ca,b,ca,b,c

  1. a∗ba*ba∗b的底
  2. a∗ca*ca∗c的底
  3. b∗cb*cb∗c的底

首先枚举状态,然后枚举当前放哪个,然后枚举上次放哪个,然后枚举最上面哪个的放置状态,然后暴力动态转移。

时间复杂度O(2n∗n2)O(2^n*n^2)O(2n∗n2)


codecodecode

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=17;
struct node{int a,b,c;
}c[N];
int f[1<<N][N][3],MS,n,ans;
bool check(int x,int y,int l,int w)
{return x>=l&&y>=w||x>=w&&y>=l;}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d%d",&c[i].a,&c[i].b,&c[i].c);MS=(1<<n);for(int s=0;s<MS;s++){for(int i=1;i<=n;i++){if(s&(1<<(i-1))) continue;int mb=s|(1<<(i-1));for(int j=1;j<=n;j++)for(int k=0;k<3;k++){int l,w;if(k==0) l=c[j].a,w=c[j].b;else if(k==1) l=c[j].a,w=c[j].c;else l=c[j].b,w=c[j].c;if(check(c[i].a,c[i].b,l,w))f[mb][i][0]=max(f[mb][i][0],f[s][j][k]+c[i].c);if(check(c[i].a,c[i].c,l,w))f[mb][i][1]=max(f[mb][i][1],f[s][j][k]+c[i].b);if(check(c[i].b,c[i].c,l,w))f[mb][i][2]=max(f[mb][i][2],f[s][j][k]+c[i].a);}}}//1-a*b 2-a*c 3-b*cfor(int i=1;i<=n;i++)for(int k=0;k<3;k++)ans=max(ans,f[MS-1][i][k]);printf("%d",ans);
}

jzoj4743-积木【状压dp】相关推荐

  1. 【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐搭积木(状压dp)

    题干: 小乐乐想要给自己搭建一个积木城堡. 积木城堡我们假设为n*m的平面矩形. 小乐乐现在手里有1*2,2*1两种地砖. 小乐乐想知道自己有多少种组合方案. 输入描述: 第一行输入整数n,m.(1& ...

  2. 【gmoj4743】【8.11模拟赛T1】积木【状压DP/暴搜】

    题目链接:积木 分析 这题数据也太水了吧我喜欢 可以直接暴力搜索每一个积木的每一个顺序的每一种放置方法. 阶乘级别的复杂度,居然能过就离谱. 正解是状压DP.f[i][j][k]f[i][j][k]f ...

  3. 2021.8.11【提高B组模拟3】T1 积木(乱糊暴搜)(正解:状压dp)

    积木 题目大意 输入样例 3 8 7 6 3 9 4 1 10 5 输出样例 18 题目数据 解题思路 暴搜就没什么好讲的了 原本以为只有40,AC了就离谱 (数据真水) 正文:状压dp 前提:我这个 ...

  4. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  5. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  6. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  7. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  8. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

  9. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  10. 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)

    题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...

最新文章

  1. Linux 设备驱动中的并发控制 小感
  2. Stack(栈)和Heap(堆)的区别
  3. Linux中printk和strace命令调试的一些技巧
  4. c++ cout头文件_C/C++知识分享:C++常用内置函数你会几个,使用过几次呢?
  5. 如何构建JavaScript警报框或弹出窗口
  6. 怎样改变计算机桌面的特效主题,电脑桌面主题、图片怎么设置的技巧大全
  7. 浏览器展示CSS伪类的动画和过渡效果应用
  8. Spring Cloud Data Flow简介
  9. 秉承极简美学设计:Polestar 2 登陆中国后会威胁到谁?
  10. python找不到txt_python 打开txt文件
  11. mac 请尝试使用字符较少,或不含标点符号的名称
  12. Ubuntu系统拼音无法正确打字怎么解决?
  13. 怎样在LaTeX中使用中文
  14. HDU6194(后缀数组)
  15. Spring框架及其特点
  16. Java实现三角形图案绘制**
  17. 全球最豪华手机诺基亚Vertu
  18. mysql导入SQL表变少了
  19. 数据竞赛专题 | 从赛题理解到竞赛入门基础
  20. 专访今目标李雪:行业分化愈加明显 专业的公司做专业的事情

热门文章

  1. 32位mysql安装包_MySQL安装指南(CPT103)
  2. python安装地是什么_如何安装python
  3. mysql判断是否在日期区间_通过sql判断时间区间是否存在数据
  4. setnx和expire合成一条指令_Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?...
  5. hbase shell远程连接_hbase与phoenix集成
  6. [C++11]委托构造函数
  7. [PAT乙级]1032 挖掘机技术哪家强
  8. C++ class实现单向循环链表(完整代码)
  9. LeetCode100 相同的树-简单
  10. 数据结构与算法--简单栈实现及其应用