题目:

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. 微信小程序的功能开发工具跟公众号的差别,小程序是一种减负思维对简单APP是巨大打击

    微信小程序的功能开发工具跟公众号的差别,小程序是一种减负思维对简单APP是巨大打击 摘要: 小程序和公众号最大的区别有如下四点:1.小程序没有粉丝,开发者在后台能看到的只能是累计用户访问数以及实时统计 ...

  2. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  3. Java系列笔记(5) - 线程

    我想关注这个系列博客的粉丝们都应该已经发现了,我一定是个懒虫,在这里向大家道歉了.这个系列的博客是在我工作之余写的,经常几天才写一小节,不过本着宁缺毋滥的精神,所有写的东西都是比较精炼的.这篇文章是本 ...

  4. 【前端开发】利用Fiddler抓包工具进行本地调试

    解决什么问题: 解决前端在本地联调页面 || 样式 || 脚本时经常修改服务器代码,浪费太多时间. 避免多人同时修改代码产生冲突问题.可以在本地调完代码之后,再贴到服务器上. 其实这个问题老早就开始想 ...

  5. Python 类中的"静态"成员变量

    本文环境:Python 2.7 一个类的三个对象实例的属性被同时修改 有段代码如下: class task_queue: queue=[] def append(self,obj): self.que ...

  6. Android MediaPlayer 操作

  7. 零碎知识点 telnet操作IMAP查看邮件

    1.用SQL语句查找出字符型字段内的最大值 select max(cast(字段 as int)) from 表 注:因为数据库是按字符比较的,10,9.因为9比1大,而只要有一位数字大,10后面就不 ...

  8. git_如何查看两个版本之间那些文件被修改

    需求 由于工程比较庞大,接近500M,每部署一次如果都全量部署,不仅仅磁盘空间耗费较大,最主要是要等很长时间, 之前就一直有这个问题,但是也就没有弄,上周领导发话了,这个问题必须要解决了 前记 增加带 ...

  9. assert函数用法总结【转】

    本文转载自:http://blog.csdn.net/u014082714/article/details/45190505 assert宏的原型定义在<assert.h>中,其作用是如果 ...

  10. WinForm画网格并填充颜色

    因为研究CodeCombat上的最后一题,自己尝试分解题目,然后想到需要画网格,还有最优化的方法 源代码如下 using System; using System.Collections.Generi ...