开始还觉得是贪心呢。。。 
给你三类积木叫你叠楼房,给你的每个积木包括四个值:长 宽(可以互换) 高 类型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. 【已解决】 iView-admin 动态路由问题

    IView-admin 在使用的时候 跳转客户详细后,点击其它页面,然后再从选项卡进入页面时,发下控制台 报错,不能正常打开客户详细页面 [vue-router] Route with name 'c ...

  2. 修改NameNode端口后,hive表查询报错

    在进行使用hive查询表数据的时候,抛出异常 hive> select*from blackList;FAILED: SemanticException Unable to determine ...

  3. idea各种设置和学习

    1. 去掉方法中的参数名提示 idea在Review时候的编码设置 idea在review代码的时候会会出现中文乱码,文件是GBK的,但是idea的字符集和项目的字符集都是UTF-8, 这时可以通过把 ...

  4. synchronized是什么

        在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchron ...

  5. Hadoop环境搭建1_JDK+SSH

    1 前言: Hadoop 最早是为了在Linux 平台上使用而开发的,但是Hadoop 在UNIX.Windows 和Mac OS X 系统上也运行良好.不过,在Windows 上运行Hadoop 稍 ...

  6. HDOJ 4923 Room and Moor

    用一个栈维护b的值,每次把一个数放到栈顶. 看栈首的值是不是大于这个数,假设大于的话将栈顶2个元素合并.b的值就是这两个栈顶元素的平均值. .. Room and Moor Time Limit: 1 ...

  7. vue实践---vue配合express实现请求数据mock

    mock数据是前端比较常见的技术,这里介绍下vue配合express 实现请求数据mock. 第一步: 安装 express :  npm install express -D 第二步: 简历需要mo ...

  8. python函数-------python2.7教程学习【廖雪峰版】(三)

    任务: 看完函数这一章    已完成 2017年6月8日16:23:491.函数的作用:写较少的代码实现较多的功能,可以多次被调用.2.可见,借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的 ...

  9. [原创]webpack动态设置css路径

    在程序入口的最上方添加 __webpack_public_path__ = path; //your path //your app start here

  10. AFN errorCode对应的状态码

    转 http://blog.csdn.NET/wangyanchang21/article/details/50932191 在很多时候都会遇到错误, 还会带有一些 Error Code , 比如在各 ...