洛谷1156:垃圾陷阱

题目描述:

  • 一头牛在一个井里,深度为\(D(1\leq D\leq100)\)
  • 每过一段时间会往井里投掷一个物品,牛可以选择将其堆起来或者吃掉,吃掉可以增加生命值(生命值随时间慢慢减少),堆起来就离出口更近一些。同时知道牛的初试生命值为\(10\)。
  • 询问如果牛可以爬出井,输出一个整数表示最早什么时候能够爬出;否则输出这头牛最长可以存活多长时间。

输入格式:

  • 第一行输入两个整数\(D\)和\(G\)表示深度和投入井的物品的数量。
  • 加下来\(G\)行,每行输入\(3\)个整数:\(T(0<T\leq100)\),表示物品被投入井中的时间;\(F(1\leq F\leq30)\),表示物品能增加的生命值;\(H(1\leq H\leq25)\),该物品能垫多少高度。

输出格式:

  • 输出一个整数表示答案。

思路:

  • 背包问题
  • 把井的深度看成是背包的容积。
  • 把堆的物品的高度看成是物品的体积,得到的生命值看成是物品的价值。
  • 那么题目的要求就是考虑最快装满背包的时间或者如果装不满就输出价值\(+(items(i).t)\)
  • 首先将投入物品按照时间作为关键字排序。
  • 那么对于牛来说,一件物品有吃掉它或者堆起来两种选择。
  • 设\(f(i,j)\)表示在第\(i\)个物品时,高度为\(j\)的生命值最大值。
    • 初始状态下: \(f(0,0)=10\),其他情况为\(-INF\)(其实这里我有点没搞懂,但是赋0就会wa掉,希望有人能评论区告诉我一下)
    • \(f(i,j)=max(f(i,j), f(i-1,j)+items(i).v-(items(i).t)-items(i-1).t))\)
    • \(f(i,j)=max(f(i,j),f(i-1,j-items(i).h)-(items(i).t-items(i-1).t))\)
  • 那如果可以爬出来,这时候选一个时间最小值。
  • 那如果不能爬出来,那么枚举一下\(f(i,j)\)的情况。

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;
const int INF = 0x3f3f3f3f;
int D, G, f[maxn][100+10], ans;
struct Node{
int t, v, h;
}a[maxn]; bool cmp(Node a, Node b){
return a.t < b.t;
} int main()
{
scanf("%d%d", &D, &G);
for(int i = 1; i <= G; i++){
auto &x = a[i];
scanf("%d%d%d", &x.t, &x.v, &x.h);
}
sort(a + 1, a + 1 + G, cmp);
for(int i = 0; i <= G; i++)
for(int j = 0; j <= D; j++) f[i][j] = -INF;
f[0][0] = 10;
for(int i = 1; i <= G; i++)
for(int j = 0; j <= D; j++)
{
if(f[i-1][j] >= a[i].t - a[i-1].t)
f[i][j] = max(f[i][j], f[i-1][j]+a[i].v-(a[i].t-a[i-1].t));
if(f[i-1][j-a[i].h] >= a[i].t-a[i-1].t && j >= a[i].h)
{
f[i][j] = max(f[i][j], f[i-1][j-a[i].h]-(a[i].t-a[i-1].t));
if(j == D)
{
printf("%d\n", a[i].t);
return 0;
}
}
}
ans = -1;
for(int i = 1; i <= G; i++)
for(int j = 0; j <= D; j++)
ans = max(ans, f[i][j] + a[i].t);
cout << ans << endl;
return 0;
}

luogu_1156: 垃圾陷阱的更多相关文章

  1. 洛谷 P1156 垃圾陷阱

    2016-05-31 09:54:03 题目链接 :洛谷 P1156 垃圾陷阱 题目大意: 奶牛掉坑里了,给定坑的深度和方块的个数,每个方块都可以垫脚或者吃掉维持生命(初始为10) 若可以出来,求奶牛 ...

  2. Codevs 1684 垃圾陷阱

    1684 垃圾陷阱 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 卡门--农夫约翰极其珍视的一条Holsteins奶牛--已经落了 ...

  3. <训练赛> 垃圾陷阱

    垃圾陷阱 时间限制: 1 Sec  内存限制: 128 MB提交: 78  解决: 38[提交][状态][讨论版] 题目描述 卡门--农夫约翰极其珍视的一条Holsteins奶牛--已经落了到&quo ...

  4. 【洛谷】P1156 垃圾陷阱【DP】

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

  5. 【题解】P1156垃圾陷阱

    [题解]P1156 垃圾陷阱 乍看此题,我们感觉状态很多,很复杂. 遇到这类型条件比较多的\(dp\),我们不要首先考虑全部设出来,而是要看到这些状态的本质.而在这道题目中,时间和高度就是关键. 考虑 ...

  6. 洛谷——P1156 垃圾陷阱

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

  7. [luogu1156]垃圾陷阱_动态规划_背包dp

    垃圾陷阱 luogu-1156 题目大意:Holsteins在距离地面D英尺的地方,FJ间隔时间ti会往下扔第i个垃圾.Holsteins对待每一个垃圾都会选择吃掉或者垫高.Holsteins有10个 ...

  8. 【2018寒假集训 Day2】【动态规划】垃圾陷阱(挖坑等填,未完成)

    垃圾陷阱 (well) 卡门--农夫约翰极其珍视的一条Holsteins奶牛--已经落了到"垃圾井"中."垃圾井"是农夫们扔垃圾的地方,它的深度为D (2 &l ...

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

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

随机推荐

  1. apache添加ssl协议实现用户认证

    目标 1对服务器的访问由http改为https, 2仅有证书的客户端可以访问服务器, 3.通过服务器端的配置,可以停用某个客户端的证书. 一 Apache服务器相关配置: 在../apache/con ...

  2. 「雅礼集训 2018 Day5」Convex 凸包、莫队

    LOJ 看到离线区间操作仍然考虑莫队,然后可以发现:我们对于原来的凸包集合按照极角序维护一个链表,那么删除一个位置可以\(O(1)\),撤回删除操作也可以\(O(1)\)(因为原来的链表结构中当前节点 ...

  3. Java学习:数据库连接池技术

    本节内容 数据库连接池 Spring JDBC : JDBC Template 数据库连接池 1.概念:其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器中会申请一些连接对象,当用 ...

  4. 使用DbVisualizer 10.0.20 查询ES中的索引时需要注意的事项

    查询前5条数据 光标停在某一个查询结果框中,左下角会显示该字段的类型 查询类型是text的字段使用单引号,使用双引号查询会报错

  5. hystrix完成对redis访问的资源隔离

    相对来说,考虑的比较完善的一套方案,分为事前,事中,事后三个层次去思考怎么来应对缓存雪崩的场景 1.事前解决方案 发生缓存雪崩之前,事情之前,怎么去避免redis彻底挂掉 redis本身的高可用性,复 ...

  6. Kafka Streams的Data Types and Serialization

    Avro <repositories> <repository> <id>confluent</id> <url>http://packag ...

  7. vue日历/日程提醒/html5本地缓存

    先上图 功能: 1.上拉日历折叠,展示周 2.左右滑动切换月 2.“今天”回到今天:“+”添加日程 3.localStorage存储日程 index,html <body> <div ...

  8. JAVA中List,Map,Set接口的区别

    从三点来分析它们之间的不同: 1.继承的接口不同: List,Set接口都是继承于Collection接口的,而Map接口不是,它是一个顶层接口. 2.自身特点: List:用来处理序列的.对于放于的 ...

  9. Mysql之视图和事务(五)

    一:视图 1.问题 对于复杂的查询,往往是有多个数据表进行关联查询而得到,如果数据库因为需求等原因发生了改变,为了保证查询出来的数据与之前相同,则需要在多个地方进行修改,维护起来非常麻烦 解决办法:定 ...

  10. Spring MVC Web.xml配置

    Web.xml spring&spring mvc 在web.xml中定义contextConfigLocation参数,Spring会使用这个参数去加载所有逗号分隔的xml文件,如果没有这个 ...