码迷,mamicode.com
首页 > 其他好文 > 详细

Demonstration(CodeForces-191B)【贪心】

时间:2019-10-17 23:46:47      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:选择   代码   包含   nbsp   ORC   algorithm   最优   活动   name   

题目链接:https://vjudge.net/problem/CodeForces-191B

题意:过于繁琐,略

思路:真·神级贪心题

  首先我们可以想到的是,为了在k天内选到最靠前的城市,我们要想办法在前k-1天挑选尽可能贵的城市,为第k天奠定基础。

  先对前n-1个城市的举办活动价值排序,对前k大的求和得到sum,接下来:

  <1>sum>=0,则不论前k-1天选择多么贵的城市,第k天都无法找到一个城市花光政府的钱,那么只能选择最差的城市

  <2>sum<0,按序号由小到大判断该城市是否包含在sum中或者将sum的第一项替换为该城市后sum仍小于0,如果满足条件,则该城市则为最优解

代码如下:

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int n,k,a[100010],val[100010];
 5 long long b;
 6 int main(){
 7     scanf("%d%d%I64d",&n,&k,&b);
 8     for(int i=1;i<=n;i++){
 9         scanf("%d",&a[i]);
10         val[i]=a[i];
11     }
12     sort(val+1,val+n);
13     long long sum=b;
14     for(int i=n-1;i>=n-k;i--)
15         sum-=val[i];
16     if(sum>=0){
17         printf("%d",n);
18     }
19     else {
20         int ans=-1;
21         for(int i=1;i<=n;i++){
22             if(a[i]>=val[n-k]||sum+val[n-k]-a[i]<0){
23                 ans=i;
24                 break;
25             }
26         }
27         printf("%d",ans);
28     }
29     return 0;
30 }

 

Demonstration(CodeForces-191B)【贪心】

标签:选择   代码   包含   nbsp   ORC   algorithm   最优   活动   name   

原文地址:https://www.cnblogs.com/xxmlala-fff/p/11695708.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!