cogs2235 烤鸡翅 贪心

链接:http://cogs.pro/cogs/problem/problem.php?pid=2235

题意:每天鸡翅数量都会增加,每天也会有人买一定数量鸡翅,求最多卖给几个人。

奥妙重重……

对每天的鸡翅数量分类讨论,如果够卖就卖上,不够卖就分析前些日子卖得最多的一个如果不卖是否够,够就退了那个,再卖这个。

为什么呢?证明如下:

如果够卖,可以发现剩下的数量更多,答案至少不会更坏;

如果不够卖,就需要退掉至少两天来卖,答案不会更好。

贪心策略得证。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<queue>
 6 using namespace std;
 7 const int maxn=250005;
 8 int x[maxn],y[maxn];
 9 priority_queue<int,vector<int>,less<int> >q;
10 int haha()
11 {
12     freopen("wing.in","r",stdin);
13     freopen("wing.out","w",stdout);
14     int n;scanf("%d",&n);
15     for(int i=1;i<=n;i++)scanf("%d",&x[i]);
16     for(int i=1;i<=n;i++)scanf("%d",&y[i]);
17     int ans=0;long long num=0;
18     for(int i=1;i<=n;i++)
19     {
20         num+=x[i];
21         if(num>=y[i])
22         {
23             num-=y[i];
24             ans++;
25             q.push(y[i]);
26         }
27         else if(!q.empty())
28         {
29             int k=q.top();q.pop();
30             if(k-y[i]>=0)
31             {
32                 num+=k-y[i];
33                 q.push(y[i]);
34             }
35             else q.push(k);
36         }
37     }
38     printf("%d\n",ans);
39 }
40 int sb=haha();
41 int main(){;}
cogs 2235

 

posted @ 2017-07-25 21:40  ccc000111  阅读(147)  评论(0编辑  收藏  举报