P1156 垃圾陷阱

10人阅读 评论(0) 收藏 举报
分类:

题目链接
题目描述

卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中。“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺。

卡门想把垃圾堆起来,等到堆得与井同样高时,她就能逃出井外了。另外,卡门可以通过吃一些垃圾来维持自己的生命。

每个垃圾都可以用来吃或堆放,并且堆放垃圾不用花费卡门的时间。

假设卡门预先知道了每个垃圾扔下的时间t(0< t<=1000),以及每个垃圾堆放的高度h(1<=h<=25)和吃进该垃圾能维持生命的时间f(1<=f<=30),要求出卡门最早能逃出井外的时间,假设卡门当前体内有足够持续10小时的能量,如果卡门10小时内没有进食,卡门就将饿死。

输入输出格式

输入格式:
第一行为2个整数,D 和 G (1 <= G <= 100),G为被投入井的垃圾的数量。

第二到第G+1行每行包括3个整数:T (0 < T <= 1000),表示垃圾被投进井中的时间;F (1 <= F <= 30),表示该垃圾能维持卡门生命的时间;和 H (1 <= H <= 25),该垃圾能垫高的高度。

输出格式:
如果卡门可以爬出陷阱,输出一个整表示最早什么时候可以爬出;否则输出卡门最长可以存活多长时间。

输入输出样例

输入样例#1:
20 4
5 4 9
9 3 2
12 6 10
13 1 1

输出样例#1:
13

说明

[样例说明]

卡门堆放她收到的第一个垃圾:height=9;

卡门吃掉她收到的第二个垃圾,使她的生命从10小时延伸到13小时;

卡门堆放第3个垃圾,height=19;

卡门堆放第4个垃圾,height=20。

解题思路:
动态规划 0-1背包

#include<bits/stdc++.h>
using namespace std;
typedef struct Node{
    int t;///表示垃圾被投进井中的时间
    int f;///表示该垃圾能维持卡门生命的时间
    int h;///表示该垃圾能垫高的高度
    bool friend operator < (Node a,Node b){
        return a.t < b.t;
    }
}Node;
int main(){
    int d,g,dp[101];///表示高度为i时的存活时间
    Node p[101];
    memset(p,0,sizeof(p));///务必要初始化
    memset(dp,0,sizeof(dp));///务必要初始化
    scanf("%d%d",&d,&g);
    for(int i = 0;i < g;i++)
        scanf("%d%d%d",&p[i].t,&p[i].f,&p[i].h);
    sort(p,p + g);///按照时间进行排序
    dp[0] = 10;///高度为0的时候,存活时间是10
    for(int i = 0;i < g;i++)///枚举每一个垃圾
        for(int j = d;j >= 0;j--)///枚举每一个高度
            ///如果当前的高度为j时的血量dp[j]能撑到第i个垃圾到达
            if(dp[j] >= p[i].t){
                ///如果当前高度+第i个垃圾堆起来的高度大于等于井的深度,就能爬出来
                if(j + p[i].h >= d){
                    printf("%d\n",p[i].t);
                    return 0;
                }
                dp[j + p[i].h] = max(dp[j + p[i].h],dp[j]);///堆放
                dp[j] += p[i].f;///加血
            }
    ///出不去时,之所以输出0,是因为如果是1,或2,或......i表示高度,如果i不是0就说明垫过,就不是最大值
    printf("%d\n",dp[0]);    
    return 0;
}
查看评论

互联网创业十大骗局陷阱

-
  • 1970年01月01日 08:00

|洛谷|动态规划|P1156 垃圾陷阱

http://www.luogu.org/problem/show?pid=1156 用布尔数组f[i][j]表示高度为i时体力值为j时的状态存在 然后DP即可 #include #includ...
  • Darost
  • Darost
  • 2016-10-03 11:11:29
  • 397

洛谷P1156 垃圾陷阱

动规
  • SilverNebula
  • SilverNebula
  • 2016-05-19 23:30:14
  • 480

洛谷【P1156】垃圾陷阱

也是一眼能看出来的01背包,但是状态不太好选择,可以选择时间也可以选择高度,其实都差不多,时空要求比较低,我选择高度作为的状态,选择了状态和决策之后,状态转移方程就显而易见了,比较难处理的是对于不能达...
  • zhaoyh2000
  • zhaoyh2000
  • 2016-12-16 16:00:30
  • 197

洛谷P1156 垃圾陷阱 背包DP

题目大意:一头牛被困在一个初始为空的垃圾坑里,之后会扔下一些垃圾。每个垃圾都可以用来吃或堆放,并且堆放垃圾不用花费时间。这头牛开始时有足够持续10小时的能量,给定一些垃圾扔下的时间、高度与吃掉能提供的...
  • YihAN_Z
  • YihAN_Z
  • 2016-08-07 12:24:05
  • 946

P1156 垃圾陷阱(dp)有待理解

题见洛谷#include #include #include #include #include using namespace std; int deep,n,maxl=0,anst=999999...
  • qq_36820605
  • qq_36820605
  • 2017-02-09 09:46:10
  • 192

2016.8.6测试解题报告(well-垃圾陷阱)

垃圾陷阱题目描述: 约翰的hesitans奶牛掉到了一个高度为D垃圾井里面,农民约翰要把奶牛救出来,于是他往垃圾井里面扔G个垃圾。对于第i个垃圾,奶牛卡门可以把他吃掉来延长f[i]小时时长的生命,也...
  • qq_33330876
  • qq_33330876
  • 2016-08-08 10:18:22
  • 251

洛谷P1156

国庆最后一天校集训队来了场模拟赛,发现本蒟蒻还是太弱了……(NOIP2007初赛真题57.5,上机模拟赛倒数) 于是决定还是要多刷点题……然后做了道DP ==========分========割=...
  • u014120397
  • u014120397
  • 2016-10-09 13:51:29
  • 220

洛谷1156 垃圾陷阱(背包动规)

题目描述: 卡门——农夫约翰极其珍视的一条Holsteins奶牛——已经落了到“垃圾井”中。“垃圾井”是农夫们扔垃圾的地方,它的深度为D (2 卡门想把垃圾堆起来,等到堆得与井同样高时,她就...
  • LZJ209
  • LZJ209
  • 2016-08-07 11:12:56
  • 1060

洛谷 P1156 垃圾陷阱

题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中。“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2&amp;lt;=D&amp;lt;=100)英尺。 卡门...
  • Eric1561759334
  • Eric1561759334
  • 2018-02-18 21:30:01
  • 32
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 1805
    排名: 2万+
    最新评论