2016-05-31 09:54:03

题目链接 :洛谷 P1156 垃圾陷阱

题目大意:

  奶牛掉坑里了,给定坑的深度和方块的个数,每个方块都可以垫脚或者吃掉维持生命(初始为10)

  若可以出来,求奶牛最早出来的时间,若出不来,求奶牛最长存活时间

解法:

  背包DP

  DP[i]表示在可以存活到i时刻的情况下,最大能到达的高度

  每个状态的转移无非两种

    1.垫脚 DP[i]+=a[k].h;

    2.吃掉 DP[i+a[k].f]=max(DP[i+a[k].f],DP[i]);

  初始:DP[10]=0;

  如果死了,就直接待在原地不动,一直吃,就可以得到最大时间.

需要注意的地方:

  1.每个方块DP完都要扫一次结果是否满足,满足直接退.

  2.时间的上限从max(a[i].t)开始就行了,因为活得比最后一个方块下落时间还久没啥意义(还不如垫脚)

 //垃圾陷阱 (洛谷 No.1156)
//背包DP
#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn=;
const int maxm=;
int DP[maxn];
int D,G;
struct node
{
int t,f,h;
};
node a[maxm];
bool comp(node a,node b)
{
return a.t<b.t;
}
int main()
{
scanf("%d %d",&D,&G);
fill(DP,DP+maxn,-);
DP[]=;
for(int i=;i<=G;i++)
{
scanf("%d %d %d",&a[i].t,&a[i].f,&a[i].h);
}
sort(a+,a++G,comp);
for(int i=;i<=G;i++)
{
for(int j=a[G].t;j>=a[i].t;j--)
{
DP[j+a[i].f]=max(DP[j+a[i].f],DP[j]);
DP[j]+=a[i].h;
}
for(int j=a[G].t+a[i].f;j>=a[i].t;j--)
{
if(DP[j]>=D)
{
printf("%d\n",a[i].t);
return ;
}
}
}
int F=;
for(int i=;i<=G&&F>=a[i].t;i++)
{
F+=a[i].f;
}
printf("%d\n",F);
return ;
}

洛谷 P1156 垃圾陷阱的更多相关文章

  1. 洛谷——P1156 垃圾陷阱

    P1156 垃圾陷阱 题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2 \le D \le 100)D(2≤D ...

  2. 洛谷 P1156 垃圾陷阱 (01背包拓展)(好题!!)

    这真是一道好题目 学到了很多 一开始感觉吃或者不吃会有后效性 然后看到洛谷的题解,直接把这个有后效性的部分当作dp的维度和值 因为这个垃圾可以堆或者不堆,所以这个很像01背包, 但是加了非常多的限制条 ...

  3. 洛谷P1156 垃圾陷阱[背包DP]

    题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺. 卡门想把垃圾堆起来,等到 ...

  4. 洛谷P1156 垃圾陷阱

    动规仍然是难关啊 题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺. 卡门想 ...

  5. 洛谷P1156 垃圾陷阱【线性dp】

    题目:https://www.luogu.org/problemnew/show/P1156 题意: 每一个垃圾投放时间是t,可以堆的高度是h,如果吃掉可以增加的生命值是f. 给定g个垃圾,初始生命值 ...

  6. 洛谷 P1156 垃圾陷阱 谈论剪枝,非满分

    这是一个91分的非dp代码(是我太弱) 剪枝八五个(实际上根本没那么多,主要是上课装逼,没想到他们dp水过去了),不过我的思路与dp不同: 1.层数到达i+1,return 这个必须有 2.当前剩余生 ...

  7. 洛谷P1156 垃圾陷阱 dp

    正解:dp 解题报告: 这儿是传送门! 话说最近怎么神仙们都开始狂刷dp,,,感觉今天写了好多dp的题解的样子?(也就三四道其实× 然后这题,首先看到要么吃要么堆起来就会想到01背包趴?然后就考虑设方 ...

  8. 洛谷 P1156 垃圾陷阱 题解

    题目传送门 dp+排序+01背包 就完事了??? 貌似就是这样的 代码: //dp 排序 01背包 #include<iostream> #include<cstdio> #i ...

  9. 洛谷$1156$ 垃圾陷阱 $dp$

    \(Sol\) \(f_{i,j}\)前\(i\)个垃圾,能活到时间\(j\)的最高垃圾高度.\(t_i\)表示第\(i\)个垃圾掉落的时间,\(g_i\)表示吃垃圾\(i\)能维持的时间,\(h_i ...

随机推荐

  1. Android studio中不同颜色代表什么意思

    和你的版本控制工具相关 绿色,已经加入控制暂未提交红色,未加入版本控制蓝色,加入,已提交,有改动白色,加入,已提交,无改动

  2. fork、vfork、clone区别

    在Linux中主要提供了fork.vfork.clone三个进程创建方法. 问题 在linux源码中这三个调用的执行过程是执行fork(),vfork(),clone()时,通过一个系统调用表映射到s ...

  3. DOM4J介绍与代码示例【转载】

    DOM4J是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JA ...

  4. 告诉你一个真实的OpenStack:都谁在用,用来干什么?

    告诉你一个真实的OpenStack:都谁在用,用来干什么? OpenStack基金会近日发布的双年调查报告显示,开源云计算软件OpenStack正在进入主流企业市场,但该项目依然面临较难部署和管理的老 ...

  5. 八大Webkit内核浏览器

    列举出时下最流行的Webkit内核浏览器,所以我们并不会做出评测和对比.PS:本文列举的浏览器有一部分为IE+Webkit双核浏览器,如果您对其他IE内核浏览器很感兴趣<抛弃数据!用体验和感觉告 ...

  6. 如何查看你的 memcached 的状态

    最近略忙,好久没有更新博客了,已长草,今天来除下草,好了,不废话了,开始! 现在很多web服务都会用到  memcached ,如何知道你的 memcached 是否正常工作,命中率如何呢,本文简单介 ...

  7. jquery 分页控件(二)

    上一章主要是关于分页控件的原理,代码也没有重构.在这一章会附上小插件的下载链接,插件主要就是重构逻辑部分,具体可以下载源文件看下,源代码也有注释.为了测试这个插件是能用的,我弄了个简单的asp.net ...

  8. UVa 442 (栈) Matrix Chain Multiplication

    题意: 给出一个矩阵表达式,计算总的乘法次数. 分析: 基本的数学知识:一个m×n的矩阵A和n×s的矩阵B,计算AB的乘法次数为m×n×s.只有A的列数和B的行数相等时,两个矩阵才能进行乘法运算. 表 ...

  9. ASP.NET Cache

    ASP.NET为了方便我们访问Cache,在HttpRuntime类中加了一个静态属性Cache,这样,我们就可以在任意地方使用Cache的功能. 而且,ASP.NET还给它增加了二个“快捷方式”:P ...

  10. textview的上下滑动效果

    1.xml文件中 <TextView    …    android:scrollbars="vertical"  ../> 2.java文件中 textview.se ...