【DFS】【拓扑排序】【动态规划】Gym - 100642A - Babs' Box Boutique
给你10个箱子,有长宽高,每个箱子你可以决定哪个面朝上摆。把它们摞在一起,边必须平行,上面的不能突出来,问你最多摆几个箱子。
3^10枚举箱子用哪个面。然后按长为第一关键字,宽为第二关键字,从大到小排序。
如果前面的宽大于等于后面的宽,就连接一条边。
形成一张DAG,拓扑排序后跑最长路即可。
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
int v[205],next[205],first[15],e;
void AddEdge(int U,int V){
v[++e]=V;
next[e]=first[U];
first[U]=e;
}
typedef pair<int,int> Point;
Point d[15];
int ans;
int a[15],b[15],c[15],cho[15],ru[15],f[15],n;
bool cmp(const Point &a,const Point &b){
return a.first!=b.first ? a.first>b.first : a.second>b.second;
}
void work(){
for(int i=1;i<=n;++i){
if(cho[i]==1){
d[i]=make_pair(max(a[i],b[i]),min(a[i],b[i]));
}
else if(cho[i]==2){
d[i]=make_pair(max(b[i],c[i]),min(b[i],c[i]));
}
else{
d[i]=make_pair(max(c[i],a[i]),min(c[i],a[i]));
}
}
e=0;
memset(first,0,sizeof(first));
memset(f,0,sizeof(f));
memset(ru,0,sizeof(ru));
sort(d+1,d+n+1,cmp);
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
if(d[j].second<=d[i].second){
AddEdge(i,j);
++ru[j];
}
}
}
queue<int>q;
for(int i=1;i<=n;++i){
if(!ru[i]){
q.push(i);
}
}
while(!q.empty()){
int U=q.front(); q.pop();
for(int i=first[U];i;i=next[i]){
f[v[i]]=max(f[U]+1,f[v[i]]);
--ru[v[i]];
if(!ru[v[i]]){
q.push(v[i]);
}
}
}
ans=max(ans,1+(*max_element(f+1,f+n+1)));
}
void dfs(int cur){
if(cur>n){
work();
return;
}
for(int i=1;i<=3;++i){
cho[cur]=i;
dfs(cur+1);
}
}
int main(){
int zu=0;
while(1){
++zu;
scanf("%d",&n);
if(n==0){
return 0;
}
for(int i=1;i<=n;++i){
scanf("%d%d%d",&a[i],&b[i],&c[i]);
}
ans=0;
dfs(1);
printf("Case %d: %d\n",zu,ans);
}
return 0;
}
【DFS】【拓扑排序】【动态规划】Gym - 100642A - Babs' Box Boutique的更多相关文章
- poj 1270(dfs+拓扑排序)
题目链接:http://poj.org/problem?id=1270 思路:就是一简单的dfs+拓扑排序,然后就是按字典序输出所有的情况. http://paste.ubuntu.com/59872 ...
- 百度之星热身赛-1001(dfs拓扑排序)
题意:作为年度优秀魔法学员的奖赏,哈利得到了一台具有魔力的计算机.这台计算机一旦开始处理某个任务,就会一直处理到这个任务结束为止(所以你可以认为它是单线程的).有一天,这台计算机得到了n个任务要处理, ...
- HDU3342有向图判圈DFS&&拓扑排序法
HDU3342 Legal or Not 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342 题目意思:一群大牛互相问问题,大牛有不会的,会被更厉害 ...
- bzoj 1093 最大半连通子图 - Tarjan - 拓扑排序 - 动态规划
一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若G'=(V ...
- Luogu3953 NOIP2017逛公园(最短路+拓扑排序+动态规划)
跑一遍dij根据最短路DAG进行拓扑排序,按拓扑序dp即可.wa了三发感觉非常凉. #include<iostream> #include<cstdio> #include&l ...
- 【BZOJ1471】不相交路径 题解(拓扑排序+动态规划+容斥原理)
题目描述 在有向无环图上给你两个起点和终点分别为$a,b,c,d$.问有几种路径方案使得能从$a$走到$b$的同时能从$c$走到$d$,且两个路径没有交点. $1\leq n\leq 200,1\le ...
- LA4255/UVa1423 Guess 拓扑排序 并查集
评分稍微有一点过分..不过这个题目确确实实很厉害,对思维训练也非常有帮助. 按照套路,我们把矩阵中的子段和化为前缀和相减的形式.题目就变成了给定一些前缀和之间的大小关系,让你构造一组可行的数据.这个东 ...
- ACM/ICPC 之 拓扑排序+DFS(POJ1128(ZOJ1083)-POJ1270)
两道经典的同类型拓扑排序+DFS问题,第二题较第一题简单,其中的难点在于字典序输出+建立单向无环图,另外理解题意是最难的难点,没有之一... POJ1128(ZOJ1083)-Frame Stacki ...
- 2016"百度之星" - 初赛(Astar Round2A)Gym Class(拓扑排序)
Gym Class Accepts: 849 Submissions: 4247 Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65 ...
随机推荐
- bzoj 1927 网络流
首先我们可以知道这道题中每个点只能经过一次,那么我们引入附加源汇source,sink,那么我们可以将每个点拆成两个点,分别表示对于图中这个节点我们的进和出,那么我们可以连接(source,i,1,0 ...
- bzoj 1588 bst
用set存下就好了. /************************************************************** Problem: 1588 User: BLADE ...
- 基于ansj_seg和nlp-lang的简单nlp工具类
1.首先在pom中引入ansj_seg和nlp-lang的依赖包, ansj_seg包的作用: 这是一个基于n-Gram+CRF+HMM的中文分词的java实现: 分词速度达到每秒钟大约200万字左右 ...
- Centos7的iso everything与DVD以及Live的区别
DVD.ISO 可以用安装程序安装的所有安装包,推荐镜像 Netinstall.iso 从网络安装或者救援系统 Everything.iso 包含centos7的一套完整的软件包,可以用来安装系统或者 ...
- CTF线下赛AWD模式下的生存技巧
作者:Veneno@Nu1L 稿费:200RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 原文:https://www.anquanke.com/post/id/8467 ...
- php伪协议
文件包含函数:include.require.include_once.require_once.highlight_file .show_source .readfile .file_get_con ...
- [device tree] How to decompile a compiled .dtb (device tree blog) into .dts (device tree source).
$ ./out/target/product/project_name/obj/KERNEL_OBJ/scripts/dtc/dtc -I dtb -O dts -o decompiled.dts ~ ...
- 【设计模式】迭代器模式(Iterator )
摘要: 1.本文将详细介绍迭代器模式的原理和实际代码中特别是Android系统代码中的应用. 纲要: 1. 引入迭代器模式 2. 迭代器的概念及优缺点介绍 3. 迭代器在Android源码中的应用 1 ...
- C# 笔记——索引器
索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的. 索引器和数组比较: (1)索引器的索引值(Index)类型不受限制 (2)索引器允许重载 ...
- debian下没有公钥解决办法
debian下没有公钥解决办法 执行命令:apt-get update 出现如下错误 正在读取软件包列表... 完成 W: 以下 ID 的密钥没有可用的公钥: 8B48AD6246925 ...