Demonstration(CodeForces-191B)贪心

Posted xxmlala-fff

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Demonstration(CodeForces-191B)贪心相关的知识,希望对你有一定的参考价值。

题目链接: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)贪心的主要内容,如果未能解决你的问题,请参考以下文章

用yii2进行(curd)接口开发(普通类型)整个流程:

shell args

2019/08/30

input特殊输入框

Element ui使用心得

Web前端-时间日期控件