题目:

Monkey and Banana

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13615    Accepted Submission(s):
7179

Problem Description
A group of researchers are designing an experiment to
test the IQ of a monkey. They will hang a banana at the roof of a building, and
at the mean time, provide the monkey with some blocks. If the monkey is clever
enough, it shall be able to reach the banana by placing one block on the top
another to build a tower and climb up to get its favorite food.

The
researchers have n types of blocks, and an unlimited supply of blocks of each
type. Each type-i block was a rectangular solid with linear dimensions (xi, yi,
zi). A block could be reoriented so that any two of its three dimensions
determined the dimensions of the base and the other dimension was the height.

They want to make sure that the tallest tower possible by stacking
blocks can reach the roof. The problem is that, in building a tower, one block
could only be placed on top of another block as long as the two base dimensions
of the upper block were both strictly smaller than the corresponding base
dimensions of the lower block because there has to be some space for the monkey
to step on. This meant, for example, that blocks oriented to have equal-sized
bases couldn't be stacked.

Your job is to write a program that
determines the height of the tallest tower the monkey can build with a given set
of blocks.

 
Input
The input file will contain one or more test cases. The
first line of each test case contains an integer n,
representing the number
of different blocks in the following data set. The maximum value for n is
30.
Each of the next n lines contains three integers representing the values
xi, yi and zi.
Input is terminated by a value of zero (0) for n.
 
Output
For each test case, print one line containing the case
number (they are numbered sequentially starting from 1) and the height of the
tallest possible tower in the format "Case case: maximum height =
height".
 
Sample Input
1
10 20 30
2
6 8 10
5 5 5
7
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
5
31 41 59
26 53 58
97 93 23
84 62 64
33 83 27
0
 
Sample Output
Case 1: maximum height = 40
Case 2: maximum height = 21
Case 3: maximum height = 28
Case 4: maximum height = 342
大意是求DAG模型的最大高度,每个盒子有无限个,所以对盒子来说有三种可能的高度(长宽倒置不考虑);
代码:

#include<bits/stdc++.h>
using namespace std;
int dp[10005];
struct C
{
int x,y;
int height;
};
bool cmp(C a,C b)
{
return a.y<=b.y;
}
bool operator<(C a,C b)
{
if (a.x<b.x&&a.y<b.y) return 1;
else if (a.x<b.y&&a.y<b.x) return 1;
else return 0;
}
int main()
{
C B[10005];
int a,b,c,i,j,maxn,n,k=0;
while (cin>>n&&n){int p=-1;maxn=-1;k++;
memset(dp,0,sizeof(dp));
for (i=1;i<=n;i++){
scanf("%d%d%d",&a,&b,&c);
B[++p].x=min(a,b),B[p].y=max(a,b),B[p].height=c;
B[++p].x=min(b,c),B[p].y=max(b,c),B[p].height=a;
B[++p].x=min(a,c),B[p].y=max(a,c),B[p].height=b;

}
sort(B,B+p+1,cmp);

for (i=0;i<=p;i++){int sumn=0;
for (j=0;j<i;j++)
{
if (B[j]<B[i]&&dp[j]>sumn) sumn=dp[j];
}
dp[i]=sumn+B[i].height;
maxn=max(maxn,dp[i]);
}
printf("Case %d: maximum height = %d\n",k,maxn);

}
return 0;
}

基本就是N^2做法没啥好说的,排序把我坑了,应该只按照一条边来排序或者按S排序就ac,

由于我是按两条边排的wa几次>_<

hdu 1069 DAG加权的更多相关文章

  1. HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径)

    HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径) Description A group of researchers ar ...

  2. HDU 1069 dp最长递增子序列

    B - Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

  3. HDU 1069&&HDU 1087 (DP 最长序列之和)

    H - Super Jumping! Jumping! Jumping! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format: ...

  4. HDU 1069 Monkey and Banana(二维偏序LIS的应用)

    ---恢复内容开始--- Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  5. 怒刷DP之 HDU 1069

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  6. HDU 1069 Monkey and Banana (DP)

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  7. (最大上升子序列)Monkey and Banana -- hdu -- 1069

    http://acm.hdu.edu.cn/showproblem.php?pid=1069      Monkey and Banana Time Limit:1000MS     Memory L ...

  8. hdu 1069 动规 Monkey and Banana

     Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  9. HDU 1069—— Monkey and Banana——————【dp】

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

随机推荐

  1. 单片机裸机下写一个自己的shell调试器(转)

    源: 单片机裸机下写一个自己的shell调试器

  2. SNMP学习笔记之SNMPv3的配置和认证以及TroubleShooting

    0x00 增加snmp v3用户 增加用户的时候,必须要停止SNMP服务. # service snmpd stop # net-snmp-config --create-snmpv3-user -r ...

  3. Python3 实现(wxpy)用微信自动定时给朋友定时推广

    Python3 实现(wxpy)用微信自动定时给朋友定时推广 安装wxpy 安装微信机器人wxpy非常简单,如果你拥有pip,请直接按照Github中的方法安装: pip install wxpy 实 ...

  4. Python 技术点

    1.文件操作 1-1 遍历文件夹和文件 import os rootDir = "/path/to/root" for parent, dirnames, filenames in ...

  5. 03: 自定义异步非阻塞tornado框架

    目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 源码 1 ...

  6. 解决mysql的Too many connections

    解决: /etc/my.cnf vim编辑 添加 max_connections= wait_timeout= 然后执行code service mysqld reload service mysql ...

  7. 20145225《网络对抗》Exp6 信息搜集与漏洞扫描

    基础问题回答 哪些组织负责DNS,IP的管理: 全球根服务器均由美国政府授权的ICANN统一管理,负责DNS和IP地址管理.全球一共有5个地区性注册机构:ARIN(北美地区业务),RIPE(负责欧洲地 ...

  8. 20145331魏澍琛 《网络对抗技术》 PC平台逆向破解

    20145331魏澍琛 <网络对抗技术> PC平台逆向破解 学习任务 1.shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中 ...

  9. python_paramiko_SSHException Invalid requirement, parse error at

    不加sleep(0.5)会出现SSHException: Invalid requirement, parse error at " '' "问题,原因暂时未知. 结论如下 如果不 ...

  10. Python3基础 函数 递归 阶乘与斐波那契数列

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...