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 }
标签:d%,val,int,sum,191B,CodeForces,Demonstration,城市 来源: https://www.cnblogs.com/xxmlala-fff/p/11695708.html