时间限制:0.25s

空间限制:4M 

题目

在离著名的国家Berland不远的地方,有一个水下工作站。这个工作站有N层。已知:是第层装有Wi的水,最多可以容纳Li的水,恐怖分子炸毁第i的代价是Pi。第i层一旦被炸毁,该层所有的水都将倾泻到第i+1层。如果某一层的水量超过了它的容量(即Li),那么该层就将自动被毁坏,所有的水也会倾泻到下一层。

Pivland的恐怖分子想要用最少的钱毁掉第N层,现在他雇佣你来计算,需要炸毁哪些层。

输入

第一行有一个自然数N(1<=n<=15000)。接下来的N行,每行3个整数Wi, Li, Pi(0<=Wi,Li,Pi<=15000)。

输出

输出需要炸毁的层的编号。


 

Solution:

                 最简单的想法是,从第一层开始枚举炸毁的第一层,但时间复杂度是O(n2)的.

s[i] 代表 从第1层到i层的水量和.l[i]为第i层的水量,c[i]是炸毁代价.

于是进一步考虑,从第i层开始炸毁,如果第 i+k层不需要炸毁,那么一定是s[i+k]-s[i-1]>l[i+k]。

从下往上推的话,

f[i]是从i层开始炸毁的代价。

如果炸毁i-1,且s[i]-s[i-2]>l[i],那么从第i-1层开始炸毁的代价是f[i]+c[i-1]-c[i];

 从第k层开始炸毁时只要将第i(k<i<=n)层里(s[i]-s[k-1]>l[i]) 层里之前算作炸毁的层的c[i]减去,并标记没被炸毁.

用优先队列优化的话将快很多,只要将当前炸毁的层入队,当满足s[i]-s[k-1]>l[i]时,出对并减去c[i];

code

#include<stdio.h>
#include<utility>
#include<queue>
using namespace std;
const int INF = 15000 + 9;
priority_queue< pair<int, int> > heap, ansheap;
int l[INF], p[INF], s[INF];
int n, w, i;
int sum, ans = 1e9;
int main()
{
scanf ("%d", &n);
for (i = 1; i <= n; ++i){
scanf ("%d%d%d", &w, l + i, p + i);
s[i] = s[i - 1] + w;
}
for (i = n; i; --i){
for (; !heap.empty() && heap.top().first > s[i - 1]; heap.pop() )
sum -= p[heap.top().second];
heap.push (make_pair (s[i] - l[i], i) );
sum += p[i];
if (sum < ans){
ans = sum;
ansheap = heap;
}
}
for (; !ansheap.empty(); ansheap.pop() )
printf ("%d\n", ansheap.top().second);
return 0;
}

  

SGU 148.B-Station的更多相关文章

  1. 数学 + 带权中位数 - SGU 114 Telecasting station

    Telecasting station Problem's Link Mean: 百慕大的每一座城市都坐落在一维直线上,这个国家的政府决定建造一个新的广播电视台. 经过了许多次试验后,百慕大的科学家们 ...

  2. SGU 114.Telecasting station

    题意: 百慕大的每一座城市都坐落在一维直线上.这个国家的政府决定建造一个新的广播电视台.经过了许多次试验后,百慕大的科学家们提出了一个结论,在每座城市的不满意度等于这座城市的市民数与这座城市与广播电视 ...

  3. SGU 114. Telecasting station 三分or找中位数

    题目链接点这儿 一開始想都没想...直接上了三分...结果...sample的答案不一样...可是过了...然后又看了看. . . 发现这不就是高中或者初中出过的求中位数的题么. . .直接找到这些的 ...

  4. 今日SGU 5.28

    SGU 121 题意:给你一张图,问你每个顶点必须有黑白两条边(如果它的边数>=2),问你怎么染色,不行就输出no 收获:你会发现不行的情况只有一个单纯的奇数环的时候,反之我们交替染色即可 #i ...

  5. Telecasting station - SGU 114(带劝中位数)

    题目大意:在一个数轴上有N个点,每个点都有一个权值,在这个数轴上找一个点,是的每个点到这个点的距离之和乘上权值的总和最小. 分析:以前也遇到过类似的问题,不过并不知道这是带权值的中位数问题,百度百科有 ...

  6. SGU 分类

    http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traff ...

  7. SGU题目总结

    SGU还是个不错的题库...但是貌似水题也挺多的..有些题想出解法但是不想写代码, 就写在这里吧...不排除是我想简单想错了, 假如哪位神犇哪天发现请告诉我.. 101.Domino(2015.12. ...

  8. [LeetCode] Gas Station 加油站问题

    There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...

  9. PAT 1072. Gas Station (30)

    A gas station has to be built at such a location that the minimum distance between the station and a ...

随机推荐

  1. Hibernate(四)基本映射

    映射的概念 在上次的博文Hibernate(三)Hibernate 配置文件我们已经讲解了一下 Hibernate中的两种配置文件,其中提到了两种配置文件的主要区别就是XML可以配置映射.这里提到的映 ...

  2. java---金额中文大小写实时转换小程序

    本例演示一个String图形用户界面的完整应用程序,包括输入数据, 显示结果,响应事件以及异常处理. 输入一个实数表示金额,每次输入时显示该金额的中文大小写形式,运行窗口见最后. 在窗口中," ...

  3. BZOJ1057 [ZJOI2007]棋盘制作(极大化思想)

    1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 1848  Solved: 936 [Submit][Sta ...

  4. Delegate。。

    Delegate类简介------------------------ 命名空间:System程序集:mscorlib(在 mscorlib.dll 中) 委托(Delegate)类是一种数据结构,通 ...

  5. 《University Calculus》-chape5-积分法-微积分基本定理

    定积分中值定理: 积分自身的定义是简单的,但是在教学过程中人们往往记得的只是它的计算方法,在引入积分的概念的时候,往往就将其与计算方法紧密的捆绑在一起,实际上,在积分简单的定义之下,微积分基本定理告诉 ...

  6. scrapy使用代理

    import base64 # Start your middleware class class ProxyMiddleware(object): # overwrite process reque ...

  7. 关于win7右下角显示“音频服务未运行”的解决方法

    今天打开电脑发现右下角的的小喇叭多了个叉叉,显示“音频服务未运行”,百度了一下,解决方法还是挺多的,一下是百度到的解决方法,希望可以帮到出现这个问题的朋友们. 解决方法:(转载的) 1.Windows ...

  8. Android UI学习 - GridView和ImageView的使用

    GridView: A view that shows items in two-dimensional scrolling grid. The items in the grid come from ...

  9. java websocket工具

    https://github.com/dzharvis/servlet-websocket-server http://redstarofsleep.iteye.com/blog/1488639 ht ...

  10. percona-MYSQLGUI监控

    1.https://www.percona.com/blog/2016/05/26/monitoring-with-percona-app-for-grafana/ http://pmmdemo.pe ...