【JZOJ4743】【NOIP2016提高A组模拟9.2】积木
题目描述
输入
输出
样例输入
3
8 7 6
3 9 4
1 10 5
输出
18
数据范围
样例解释
解法
容易从n<=15得出可以使用状态压缩动态规划。
设f[i][j][k]表示01状态为i,最后一个放的是第j个积木,最后放的积木按第k种方式来摆放。摆放方式有3种,长 宽、长 高、宽 高。
转移方程显然。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
#define sqr(x) ((x)*(x))
#define ln(x,y) int(log(x)/log(y))
using namespace std;
const char* fin="aP2.in";
const char* fout="aP2.out";
const int inf=0x7fffffff;
const int maxn=17,maxk=1<<maxn;
const int w[3][3]={{0,1,2},{0,2,1},{1,2,0}};
int n,i,j,k,l,o;
int a[maxn][3];
ll f[maxk][maxn][3];
ll ans;
int main(){scanf("%d",&n);for (i=1;i<=n;i++){scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);sort(a[i],a[i]+3);}for (i=0;i<1<<n;i++)for (j=1;j<=n;j++)for (k=0;k<3;k++){if (i==((1<<n)-1)) continue;for (l=1;l<=n;l++){if (i&(1<<(l-1))) continue;for (o=0;o<3;o++){if (a[l][w[o][0]]<=a[j][w[k][0]] && a[l][w[o][1]]<=a[j][w[k][1]]){f[i|(1<<(l-1))][l][o]=max(f[i][j][k]+a[l][w[o][2]],f[i|(1<<(l-1))][l][o]);ans=max(ans,f[i|(1<<(l-1))][l][o]);}}}}printf("%lld",ans);return 0;
}
启发
n很小时考虑状态压缩动态规划。
转载于:https://www.cnblogs.com/hiweibolu/p/6714912.html
【JZOJ4743】【NOIP2016提高A组模拟9.2】积木相关推荐
- JZOJ 100024. 【NOIP2016提高A组模拟7.6】数球
Description 小A有n个球,编号分别为1到n,小A每次都会从n个球中取出若干个球,至少取一个,至多取n个,每次取完再放回去,需要满足以下两个条件. 每次取出的球的个数两两不同. 每次取出的球 ...
- JZOJ4708. 【NOIP2016提高A组模拟8.20】奇洛金卡达 倒着做的思想+并查集维护
题目大意 给定一个长度小于等于kk的字符串和qq,表示现在有qq个操作,每个操作给定两个参数li,ril_i,r_i表示把现在的字符串第lil_i到rir_i把其中编号为奇数的按顺序写下来,再在后面把 ...
- 【NOIP2016提高A组模拟9.9】闭门造车
题目 自从htn体验了一把飙车的快感,他就下定决心要闭门造车!但是他两手空空怎么造得出车来呢?无奈的他只好来到了汽车零部件商店. 一走进商店,玲琅满目的各式零件看得htn眼花缭乱.但是他很快便反应过来 ...
- [JZOJ4788] 【NOIP2016提高A组模拟9.17】序列
题目 描述 题目大意 一个序列,每次可以使一段区间内的所有数加一(模四). 问最少的操作次数. 思考历程 一看这题目,诶,这不就是那道叫密码锁的题目吗? 然后随便打一打,样例过了,就再也没有思考这一题 ...
- JZOJ 4726. 【NOIP2016提高A组模拟8.22】种花
Description 经过三十多个小时的长途跋涉,小Z和小D终于到了NOI现场--南山南中学.一进校园,小D就被花所吸引了(不要问我为什么),遍和一旁的种花园丁交(J)流(L)了起来. 他发现花的摆 ...
- JZOJ 4676. 【NOIP2016提高A组模拟7.21】模板串
Description 科学家温斯顿从数据库中找到了一串相当长的字符串. 他正试图用一个模板串来重构这个字符串. 他可以将模板串复制多份,通过合适的方式拼接起来,使得最终的串与原串一致. 如果两个模板 ...
- JZOJ 4675. 【NOIP2016提高A组模拟7.21】Double-row
Description 科学家温斯顿在一张超长的白纸上写下了两行数,每一行数有N个. 但他写完后觉得看起来有点不和谐.他希望重新编排,使得每一行数中没有相同的数. 他每次可以调换同一列的两个数. 请帮 ...
- JZOJ 4786. 【NOIP2016提高A组模拟9.17】小a的强迫症
Description Input Sample Input 3 2 2 1 Output Sample Output 3 样例解释: Data Constraint Solution 首先,我们设之 ...
- 【JZOJ4819】【NOIP2016提高A组模拟10.15】算循环
题目描述 输入 输出 样例输入 167 198 样例输出 906462341 数据范围 解法 令f(n)=∑ni=1i,g(n)=∑ni=1i2 易得ans=∑ni=1∑mj=1f(n−i+1)∗f( ...
- 【NOIP2016提高A组模拟10.15】打膈膜
题目 分析 贪心, 先将怪物按生命值从小到大排序(显然按这个顺序打是最优的) 枚举可以发对少次群体攻击, 首先将所有的群体攻击发出去, 然后一个一个怪物打,当当前怪物生命值大于2,如果还有魔法值就放重 ...
最新文章
- 关于mybatis的xml文件中使用 >= 或者 <= 号报错的解决方案
- Tungsten Fabric SDN — for Akraino Based Network Edges
- 多边形填充算法-有序边表法(扫描线算法) 计算机图形学
- 腾讯花85亿买岛;微信发原图或泄露位置信息?高通逼因特尔把Modem芯片业务卖给苹果?小米9官网正式下架……...
- 因更改注册表而导致无法打开QQ文件所在文件夹
- Layui导航树美化
- 怎么看台式计算机是几位的,怎么看电脑是32位还是64位?一目了然
- js自定义对象 (转)
- IDEA 中创建多级目录
- VMWare关闭beep声
- 聚类分析-K均值matlab(一)
- 小项目: low版本的 员工信息程序:
- 信息类产品检测培训讲义-EN55022
- python版武侠小说男女侠姓名生成器
- matlab里的dsolve,matlab_dsolve
- Android开发两年,我要跳槽去阿里巴巴了,做个阶段总结,flutterrow高度对齐
- 金典指纹考勤机安装及使用操作步骤
- MTCNN中的重叠度IOU和非极大值抑制NMS原理及Python实现
- 数据挖掘的过程是什么?通俗易懂
- 数学与计算机学院校友会,福州大学数学与计算机科学学院厦门校友会成立
热门文章
- 装箱问题 BPP first fit、best fit、first fit decreasing、best fit decreasing
- kubernetes视频教程笔记 (25)-集群调度-调度过程说明
- ubuntu命令行打开vscode-insider_系统小技巧:迁移Wubi安装的ubuntu到Windows 10
- php pdo insertid,php-在PDO准备好的语句内使用LAST_INSERT_ID插入...
- 惠普电脑怎么用access_学习如何使用access帮助系统
- 十九、Math和Random类
- Ubuntu /CentOS 设置开机启动,添加自定义系统服务,自定义开机启动
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_06 Properties集合_1_使用Properties集合存储数据,遍历取出集合中的数据...
- Vue—实例成员computed和watch
- java基础学习及总结