开始还觉得是贪心呢。。。 
给你三类积木叫你叠楼房,给你的每个积木包括四个值:长 宽(可以互换) 高 类型d 
d=0:你只能把它放在地上或者放在 长 宽 小于等于 自己的积木上面 
d=1:你只能把它放在地上或者放在 长 宽 小于等于 自己的积木上面,但是这儿其面积必须大于下面积木的面积 
d=2:你只能把它放在地上或者放在 长 宽 小于 自己的积木上面 
最后给你n块积木,问你最高可以堆多高

  如果直接遍历的话每块积木都可以放在任意位置(满足条件),无法使用dp。但是注意这儿有个条件就是当d变大时,堆积的条件变得越来越苛刻了,你可以看到是:两个都小于等于,只能有一个等于,两个都小于。所以可以排序,当然首先让每块积木长大于宽,再按照长 宽从小到大,d从大到小排序,这样进行dp,从前到后遍历每个位置的时候再向前便利到开头求一个最大值(满足条件)就可以了。可以遍历的依据是:没有遍历到的位置一定不能当放在当前的积木的下方

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<string>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define eps 1E-8
/*注意可能会有输出-0.000*/
#define Sgn(x) (x<-eps? -1 :x<eps? 0:1)//x为两个浮点数差的比较,注意返回整型
#define Cvs(x) (x > 0.0 ? x+eps : x-eps)//浮点数转化
#define zero(x) (((x)>0?(x):-(x))<eps)//判断是否等于0
#define mul(a,b) (a<<b)
#define dir(a,b) (a>>b)
typedef long long ll;
typedef unsigned long long ull;
const int Inf=<<;
const double Pi=acos(-1.0);
const int Max=;
struct node
{
ll aa1,bb1,cc1,dd1;
}sto[Max];
ll dp[Max];
bool cmp(struct node p1,struct node p2)//**排序**
{
if(p1.aa1==p2.aa1)
{
if(p1.bb1==p2.bb1)
return p1.dd1>p2.dd1;
else
return p1.bb1<p2.bb1;
}
else
return p1.aa1<p2.aa1;
}
int Jud(int i,int j)
{
if(!sto[i].dd1)
{
if(sto[i].aa1>=sto[j].aa1&&sto[i].bb1>=sto[j].bb1)
return ;
}
if(sto[i].dd1==1ll)
{
if(sto[i].aa1>=sto[j].aa1&&sto[i].bb1>sto[j].bb1||
sto[i].aa1>sto[j].aa1&&sto[i].bb1>=sto[j].bb1
||sto[i].aa1>sto[j].aa1&&sto[i].bb1>sto[j].bb1)
return ;
}
if(sto[i].dd1==2ll)
{
if(sto[i].aa1>sto[j].aa1&&sto[i].bb1>sto[j].bb1)
return ;
}
return ;
}
ll Solve(ll n)
{
ll manx=0ll;
for(int i=;i<n;i++)
{
dp[i]=sto[i].cc1;
for(int j=;j<i;j++)
{
if(Jud(i,j))
{
dp[i]=max(dp[i],dp[j]+sto[i].cc1);
}
}
}
for(int i=;i<n;i++)
manx=max(manx,dp[i]);
return manx;
}
int main()
{
ll n;
while(~scanf("%I64d",&n)&&n)
{
for(int i=;i<n;i++)
{
scanf("%I64d %I64d %I64d %I64d",&sto[i].aa1,&sto[i].bb1,&sto[i].cc1,&sto[i].dd1);
if(sto[i].aa1<sto[i].bb1)
swap(sto[i].aa1,sto[i].bb1);
}
sort(sto,sto+n,cmp);
printf("%I64d\n",Solve(n));
}
return ;
}

HDU 4001 To Miss Our Children Time(2011年大连网络赛 A 贪心+dp)的更多相关文章

  1. HDU 4004 The Frog's Games(2011年大连网络赛 D 二分+贪心)

    其实这个题呢,大白书上面有经典解法  题意是青蛙要跳过长为L的河,河上有n块石头,青蛙最多只能跳m次且只能跳到石头或者对面.问你青蛙可以跳的最远距离的最小值是多大 典型的最大值最小化问题,解法就是贪心 ...

  2. hdu 4035 2011成都赛区网络赛E 概率dp ****

    太吊了,反正我不会 /* HDU 4035 dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点 ...

  3. hdu 4044 2011北京赛区网络赛E 树形dp ****

    专题训练 #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm ...

  4. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

  5. hdu 4038 2011成都赛区网络赛H 贪心 ***

    贪心策略 1.使负数为偶数个,然后负数就不用管了 2.0变为1 3.1变为2 4.2变为3 5.若此时操作数剩1,则3+1,否则填个1+1,然后回到5

  6. hdu 4023 2011上海赛区网络赛C 贪心+模拟

    以为是贪心,结果不是,2333 贪心最后对自己绝对有利的情况 点我 #include<cstdio> #include<iostream> #include<algori ...

  7. hdu 5869 Different GCD Subarray Query BIT+GCD 2016ICPC 大连网络赛

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  8. HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)

    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: ...

  9. hdu 4001 To Miss Our Children Time( sort + DP )

    To Miss Our Children Time Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Jav ...

随机推荐

  1. Arcgis:什么是栅格数据类型

    栅格数据单元大小 栅格所表示的内容的详细程度(要素现象)通常取决于栅格的单元(像素)大小或空间分辨率. 单元必须足够小,这样才可以捕获到所需的详细信息: 而单元又必须足够大,这样才可以提高计算机存储和 ...

  2. 《TomCat与Java Web开发技术详解》(第二版) 第八章节的学习总结 -- 访问mysql

    终于学到如何访问Mysql了 1. 可以看看此章节提供的sql脚本,以后可以照着写了.此外,对于Mysql如何使用,最好的地方就是其官网介绍了.http://dev.mysql.com/doc/ref ...

  3. 解决Apache长时间占用内存大的问题,Apache 内存优化方法

    问:为什么服务器在连续运行多天后或访问峰值后,进程中的一个Apache.exe占用内存几百兆不减少?答:用记事本打开apache2\conf\httpd.conf,我在centos5上装了kloxo, ...

  4. 昂贵的聘礼 - poj 1062 (Dijkstra+枚举)

      Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39976   Accepted: 11596 Description 年 ...

  5. 如何理解OOP?

    OOP (Object Oriented Programming)面向对象编程 1.它符合我们现在思考习惯 2.它让一些复杂的事情变得更加简单 3.它让操作者比那成了指挥者

  6. push推送服务设计

    PUSH系统架构设计简述 一.网络传输协议的选择 PUSH系统协议选取: UDP协议实时性更好,但是如何处理安全可靠的传输并且处理不同客户端之间的消息交互是个难题,实现起来过于复杂,那就非TCP协议莫 ...

  7. px与与rem vw的区别

    1.px 使用具体像素点为单位,好处是比较稳定和精确,但在浏览器放大缩小会出现问题 2.rem 参考根元素的值 例如设置根元素字体大小是20像素 在h1中设置字体大小 那么H1的大小就是40px p的 ...

  8. Gradle 构建工具

    参考文章: 作者:ghui 链接:https://www.zhihu.com/question/30432152/answer/48239946 来源:知乎 著作权归作者所有.商业转载请联系作者获得授 ...

  9. JSP 表单处理向服务器提交信息

    JSP 表单处理 我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理.浏览器中使用 GET 和 POST 方法向服务器提交数据. GET 方法 GET方法将请求的编码信息添加在网址后面, ...

  10. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第11章节--为Office和SP解决方式开发集成Apps Office新的App模型

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第11章节--为Office和SP解决方式开发集成Apps  Office新的App模型         Office 2 ...