uva 103 经典DAG变形
https://vjudge.net/problem/UVA-103
也是一个经典的DAG模型,因为书上的翻译和原文不照导致WA两发= =
对于同一维度的两个箱子A,B,A可以嵌套在B中的一个充分条件是A所有的边长和 < B所有的边长和,先根据边长和进行排序,在比较A是否能嵌套于B中时,把两个箱子的边长按升序排列后一一对比只要均满足A<B就说明A可以嵌套与B中。
#include<bits/stdc++.h>
using namespace std;
int V,N,f[];
struct box
{
int s,u;
int a[];
void show()
{
for(int i=;i<=V;++i) printf("%d ",a[i]);puts("");
}
}P[];
bool cmp(box A,box B){return A.s<B.s;}
bool ok(box A,box B)
{
for(int i=;i<=V;++i)
if(A.a[i]>=B.a[i]) return ;
return ;
}
int main()
{
int i,j,k;
int path[];
while(cin>>N>>V){int ans=;
memset(path,-,sizeof(path));
for(i=;i<=N;++i)
{
P[i].s=;
P[i].u=i;
for(j=;j<=V;++j)
{
scanf("%d",&P[i].a[j]);
P[i].s+=P[i].a[j];
}
sort(P[i].a+,P[i].a++V);
}
memset(f,,sizeof(f));
sort(P+,P++N,cmp);
for(i=;i<=N;++i)
{
int maxn=,u=i;
for(j=;j<i;++j)
{
if(ok(P[j],P[i])&&f[j]>maxn){
maxn=f[j];
u=j;
}
}
path[i]=u;
f[i]=maxn+;
ans=max(ans,f[i]);
}
stack<int>T;
int x=ans;
for(i=N;i;--i)
{
if(f[i]==ans){
int u=i;
while(T.empty()||u!=T.top()){
T.push(u);
u=path[u];
}
break;
}
}
printf("%d\n%d",ans,P[T.top()].u);T.pop();
while(!T.empty()){
printf(" %d",P[T.top()].u);
T.pop();
}
puts("");
}
return ;
}
uva 103 经典DAG变形的更多相关文章
- UVa 103 Stacking Boxes --- DAG上的动态规划
UVa 103 题目大意:给定n个箱子,每个箱子有m个维度, 一个箱子可以嵌套在另一个箱子中当且仅当该箱子的所有的维度大小全部小于另一个箱子的相应维度, (注意箱子可以旋转,即箱子维度可以互换),求最 ...
- UVa 103 - Stacking Boxes (LIS,打印路径)
链接:UVa 103 题意:给n维图形,它们的边长是{d1,d2,d3...dn}, 对于两个n维图形,求满足当中一个的全部边长 依照随意顺序都一一相应小于还有一个的边长,这种最长序列的个数,而且打 ...
- UVA 103 Stacking Boxes n维最长上升子序列
题目链接:UVA - 103 题意:现有k个箱子,每个箱子可以用n维向量表示.如果一个箱子的n维向量均比另一个箱子的n维向量大,那么它们可以套接在一起,每个箱子的n维向量可以互相交换值,如箱子(2,6 ...
- uva 103 Stacking Boxes(DAG)
题目连接:103 - Stacking Boxes 题目大意:有n个w维立体, 输出立体互相嵌套的层数的最大值, 并输出嵌套方式, 可嵌套的要求是外层立体的w条边可以分别对应大于内层立体. 解题思路: ...
- UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子. 要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明 ...
- UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)
Stacking Boxes Background Some concepts in Mathematics and Computer Science are simple in one or t ...
- Uva 10891 经典博弈区间DP
经典博弈区间DP 题目链接:https://uva.onlinejudge.org/external/108/p10891.pdf 题意: 给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能 ...
- UVa 103 - Stacking Boxes(dp求解)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- UVA 10313(完全背包变形)
Problem B Pay the Price Input: standard input Output: standard output Time Limit: 2 seconds Memory L ...
随机推荐
- spring中实现自己的初始化逻辑
实现这两个listener都可以进行自己的初始化逻辑. InitializingBean.afterPropertiesSet 这个优先调用 ApplicationListener.onApplica ...
- python函数回顾:next()
描述 next() 返回迭代器的下一个项目. 语法 next(iterator[, default]) 参数说明: iterator -- 可迭代对象 default -- 可选,用于设置在没有下一个 ...
- xlwt 模块 操作excel
1.xlwt 基本用法 import xlwt #1 新建文件 new_file = open('test.xls', 'w') new_file.close() #2 创建工作簿 wookbook ...
- LeetCode:旋转图像【48】
LeetCode:旋转图像[48] 题目描述 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使 ...
- Hibernate学习---缓存机制
前言:这些天学习效率比较慢,可能是手头的事情比较多,所以学习进度比较慢. 在之前的Hibernate学习中,我们无论是CURD,对单表查询还是检索优化,我们好像都离不开session,session我 ...
- iOS 结构简单清晰的 设置页面
这个是也是看了人家的代码,觉得甚是简单清晰,也是比较容易扩展.拿来学习一下 效果展示: 重点有以下2处: 1 .建立groupModel 列清组元素:当前组list 集合, 是否有header 或者 ...
- Hibernate_HelloWord
Hibernate操作步骤 1.新建项目 2.加jar包 3.写XML配置文件hibernate.cfg.xml 4.写log4j.properties日志文件 5.在MySql数据库中建studen ...
- 每天一个Linux命令(60)ip命令
ip命令是Linux下较新的功能强大的网络配置工具. (1)用法: 用法: ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]] ...
- 【HackerRank】Closest Numbers
Sorting is often useful as the first step in many different tasks. The most common task is to make f ...
- C语言math.h库函数中atan与atan2的区别
源: C语言math.h库函数中atan与atan2的区别 C语言中的atan和atan2