【HDOJ】4544 湫湫系列故事——消灭兔子

贪心,普通贪心两层循环TLE了,然后用优先级队列维护内层。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <queue>
 6 #include <algorithm>
 7 using namespace std;
 8
 9 #define MAXN 100005
10
11 typedef struct arrow_t {
12     int p, d;
13     bool operator < (const arrow_t &x) const {
14         return p > x.p;
15     }
16 } arrow_t;
17
18 int B[MAXN];
19 arrow_t arrows[MAXN];
20 int n, m;
21
22 bool comp(arrow_t a, arrow_t b) {
23     return a.d < b.d;
24 }
25
26 int main() {
27     int i, j, k;
28     __int64 ans;
29     arrow_t arr;
30     bool flag;
31
32     #ifndef ONLINE_JUDGE
33         freopen("data.in", "r", stdin);
34     #endif
35
36     while (scanf("%d %d", &n, &m) != EOF) {
37         for (i=0; i<n; ++i)
38             scanf("%d", &B[i]);
39         for (i=0; i<m; ++i)
40             scanf("%d", &arrows[i].d);
41         for (i=0; i<m; ++i)
42             scanf("%d", &arrows[i].p);
43
44         sort(B, B+n);
45         sort(arrows, arrows+m, comp);
46         ans = 0;
47         priority_queue<arrow_t> Q;
48         k = m-1;
49         flag = true;
50         for (i=n-1; i>=0; --i) {
51             while (k>=0 && arrows[k].d>=B[i]) {
52                 Q.push(arrows[k]);
53                 --k;
54             }
55             if (Q.empty()) {
56                 flag = false;
57                 break;
58             }
59             arr = Q.top();
60             Q.pop();
61             ans += arr.p;
62         }
63
64         if (flag) {
65             printf("%I64d\n", ans);
66         } else {
67             printf("No\n");
68         }
69     }
70
71     return 0;
72 }
时间: 2024-11-09 00:38:15

【HDOJ】4544 湫湫系列故事——消灭兔子的相关文章

hdu 4544 湫湫系列故事——消灭兔子 优先队列+贪心

将兔子的血量从小到大排序,箭的威力也从小到大排序, 对于每只兔子将威力大于血量的箭加入队列,写个优先队列使得出来数位价钱最少.. #include<stdio.h> #include<queue> #include<algorithm> #include<iostream> #include<functional> using namespace std; const int maxn=100010; struct tt { int d; int

HDU - 4544 湫湫系列故事――消灭兔子 2013腾讯编程马拉松复赛第三场

Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买. 假设每种箭只能使用一次,每只免子也只能被射一次,请计算要消灭地图上的所有兔子最少需要的QQ币. Input 输入数据有多组,每组数据有四行: 第一行有两个整数N,M(1 <= N, M &l

湫湫系列故事——消灭兔子

湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 2985    Accepted Submission(s): 984 Problem Description 湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型

HDU-4544 湫湫系列故事——消灭兔子

湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买. 假设每种箭只能使用一次,每只免子也只能被射一次,请计算要消灭地图上的所有兔子最少需要的QQ币. Input输入数据有多组,每组数据有四行: 第一行有两个整数N,M(1 <= N, M <= 100000),分

HDU-4532湫秋系列故事——安排座位

Problem Description 为了给腾讯公司找到更多优秀的人才,HR湫秋最近去某高校组织了一次针对该校所有系的聚会,邀请了每个系的一些优秀学生来参加. 作为组织者,湫秋要安排他们的座位.这并不是一件很简单的事情,因为只有一排位置,并且位置总数恰好等于参加聚会的人数.为了促进交流,两个来自相同系的同学不可以座位相邻.湫秋现在希望知道有多少种不同的合理安排座位的方法(任意两个合理的安排方法,只要有一个位置的同学不同,都被认为是不同的). Input 输入第一行为T,表示有T组测试数据. 每

[HDU4532]湫秋系列故事——安排座位

题面在这里 description 有\(n\)种颜色的小球,每种颜色的小球有\(a_i\)个: 要把它们摆成一排,求相邻小球颜色不相同的摆放方案数. 任意两个合理的安排方法,只要有一个位置的同学不同,都被认为是不同的. data range \[n\le 50,a_i\le 50,\sum a_i\le 500\] solution 鸣谢YCB 以下先考虑可重排列的情况 考虑容斥: \[Ans=\sum_{i=0}^{n-1}(-1)^{i}f(i)\] 其中\(f(x)\)表示至少有\(x\

湫湫系列故事——减肥记I(杭电4508)(完全背包)

湫湫系列故事--减肥记I Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 2612    Accepted Submission(s): 1345 Problem Description 对于吃货来说,过年最幸福的事就是吃了,没有之一! 但是对于女生来说,卡路里(热量)是天敌啊! 资深美女湫湫深谙"胖来如山倒,胖去如抽丝"的道

hdu----(4522)湫湫系列故事——过年回家(最短路)

湫湫系列故事——过年回家 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1095    Accepted Submission(s): 226 Problem Description 出门在外,最想念的还是家,对在深圳腾讯工作的HR湫湫来说,春节回家是一年中最期盼的事,不仅可以见到阔别已久的亲人,还能以相亲的名义调侃众多帅哥(她的内心告诉她

HDU4508 湫湫系列故事——减肥记I

这题一开始看还以为是0,1背包问题,不过老师说过了完全背包就按照这个思路做.(虽然偷偷去百度了一下到底是不是,有点怀疑老师是不是记错了的说); 顺便记下对一维数组方程的理解; for(int i =1;i<=n;i++)有n次就可以啦;//闭区间 for(int j=b[i];j<=m;j++)//每进行一次循环,第i件物品数加1或者0; dp[j]=max(dp[j],dp[j-b[i]]+a[i]);//如果是最优解的话,先后顺序无所谓是不是; 下面给出代码.嘻嘻. //这个在背包九讲里面