[USACO12FEB]牛券Cow Coupons

Posted mrclr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[USACO12FEB]牛券Cow Coupons相关的知识,希望对你有一定的参考价值。

嘟嘟嘟

 

这其实是一道贪心题,而不是dp。

首先我们贪心的取有优惠券中价值最小的,并把这些东西都放在优先队列里,然后看[k + 1, n]中,有些东西使用了优惠券减的价钱是否比[1, k]中用了优惠券的物品更划算,是的话就更新。

技术分享图片
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<cctype>
 8 #include<vector>
 9 #include<stack>
10 #include<queue>
11 using namespace std;
12 #define enter puts("") 
13 #define space putchar(‘ ‘)
14 #define Mem(a, x) memset(a, x, sizeof(a))
15 #define rg register
16 typedef long long ll;
17 typedef double db;
18 const int INF = 0x3f3f3f3f;
19 const db eps = 1e-8;
20 const int maxn = 5e4 + 5;
21 inline ll read()
22 {
23   ll ans = 0;
24   char ch = getchar(), last =  ;
25   while(!isdigit(ch)) {last = ch; ch = getchar();}
26   while(isdigit(ch)) {ans = ans * 10 + ch - 0; ch = getchar();}
27   if(last == -) ans = -ans;
28   return ans;
29 }
30 inline void write(ll x)
31 {
32   if(x < 0) x = -x, putchar(-);
33   if(x >= 10) write(x / 10);
34   putchar(x % 10 + 0);
35 }
36 
37 int n, k;
38 ll m;
39 struct Node
40 {
41   ll c, p;
42 }t[maxn];
43 
44 bool cc(Node a, Node b) {return a.c < b.c;}
45 bool cp(Node a, Node b) {return a.p < b.p;}
46 
47 priority_queue<ll, vector<ll>, greater<ll> > q;
48 
49 int solve()
50 {
51   sort(t + 1, t + n + 1, cc);
52   ll sum = 0;
53   for(int i = 1; i <= k; ++i)
54     {
55       sum += t[i].c;
56       if(sum > m) return i - 1;
57       else if(i == n) return n;
58       q.push(t[i].p - t[i].c);
59     }
60   sort(t + k + 1, t + n + 1, cp);
61   int ans = k;
62   for(int i = k + 1; i <= n; ++i)
63     {
64       ll tp = q.empty() ? (ll)INF * (ll)INF : q.top();
65       if(t[i].p - t[i].c > tp)
66     {
67       sum += tp + t[i].c;
68       q.pop(); q.push(t[i].p - t[i].c);
69     }
70       else sum += t[i].p;
71       if(sum > m) return ans;
72       ans++;
73     }
74   return ans;
75 }
76 
77 int main()
78 {
79   n = read(); k = read(); m = read();
80   for(int i = 1; i <= n; ++i) t[i].p = read(), t[i].c = read();
81   write(solve());
82   return 0;
83 }
View Code

 

以上是关于[USACO12FEB]牛券Cow Coupons的主要内容,如果未能解决你的问题,请参考以下文章

[USACO12FEB]牛券Cow Coupons

牛券Cow Coupons

bzoj2590[Usaco2012 Feb]Cow Coupons*

BZOJ2590: [Usaco2012 Feb]Cow Coupons

[USACO 2012 Feb G]Cow Coupons----贪心&带悔(看完稳AC)

[USACO11FEB] Cow Line