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

捆绑出售

时间:2020-03-06 22:19:23      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:支付   main   pac   ios   name   return   syn   turn   out   

# 题意
有 n 件商品,你带着 p 元钱,每次你可以选择至多 k 件商品,只需要支付其中最贵的商品的价格就可以买下你选择的这些商品
你带的钱最多可以购买多少件商品

# 题解
二分最后的位置,check时从后往前减保证正确性

 1 #include <bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const int N=1e5+10;
 5 ll a[N];
 6 int n,k;
 7 ll p;
 8 bool check(ll mid){
 9    ll pos=p;
10    for(int i = mid; i >= 1; i-=k)
11       pos-=a[i];
12    return pos>=0;
13 }
14 int main(){
15    ios::sync_with_stdio(0);
16    cin.tie(0);
17    cout.tie(0);
18    cin>>n>>p>>k;
19    for(int i = 1; i <= n; i++)
20       cin >> a[i];
21    sort(a+1,a+n+1);
22 
23    int l=1,r=n;
24    while(l < r){
25       int mid = l+r+1 >> 1;
26       if(check(mid))
27          l = mid;
28       else
29          r = mid-1;
30    }
31    cout<<l<<endl;
32 }

 

捆绑出售

标签:支付   main   pac   ios   name   return   syn   turn   out   

原文地址:https://www.cnblogs.com/hhyx/p/12430962.html

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