题目:

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. spoj1825 Free tour II

    题目链接 一道神奇的点分治 貌似有很多做法,我觉得BIT要好些一些(雾 要求经过黑点数<k就用BIT区间查询前缀 对于每个点用  BIT[0,k-经过黑点数]的最大值+路径长度 使用点分治做到O ...

  2. WindowsServer-性能计数器

    https://jingyan.baidu.com/article/59703552e764e48fc00740dd.html

  3. java项目报错: org.springframework.beans.factory.BeanCreationException找不到mapper.xml文件

    错误代码 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userSer ...

  4. 20145337 《网络对抗技术》Web基础

    20145337 <网络对抗技术>Web基础 一.实验后回答问题 什么是表单? 表单是HTML的一个重要部分,主要用于将用户输入的信息提交到服务器.如果是普通的HTML页面,则当浏览器提出 ...

  5. 设置控件如ImageButton可见与否

    继承view的控件有三种ui属性: 1.setVisibility(View.Gone); 不可见,不占有空间 2.setVisibility(View.VISIBLE); 可见 3.setVisib ...

  6. chrome浏览器新建标签打开页面【学习笔记】

    按照下面方法进行设置即可

  7. linux下精确替换某个字符串

    1.linux下精确替换某个字符串 sed -i 's/\<old\>/new/g' filename.txt 2.举例: 2.1有个文件名为filename.txt,内容如下: newd ...

  8. ISSCC 2017论文导读 Session 14:A 0.62mW Ultra-Low-Power Convolutional-Neural-Network Face-Recognition Pro

    A 0.62mW Ultra-Low-Power Convolutional-Neural-Network Face-Recognition Processor and a CIS Integrate ...

  9. 【安装】Mysql在Linux上安装

    1.下载 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 下载版本:mysql-5.6.37-linux-glibc2.12- ...

  10. 精巧好用的DelayQueue 转

    我们谈一下实际的场景吧.我们在开发中,有如下场景 a) 关闭空闲连接.服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之.b) 缓存.缓存中的对象,超过了空闲时间,需要从缓存中移出.c) 任务超 ...