这是一道贪心题。维护一个结构体,根据蛋糕的价格来排序。
从小到大枚举,看看最多能够满足多少人就可以了。
注意需要开unsigned long long!!!
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int MAX = 100005;
struct node
{
int p;
int c;
}a[MAX];
bool cmp(node x,node y)
{
return x.p < y.p;
}
signed main()
{
int n, b;
cin >> n >> b;
for( int i = 1; i <= n; ++ i)
cin >> a[i].p >> a[i].c;
sort(a+1, a+1+n, cmp);
int ans = 0;
for(int i = 1; i <= n; ++ i)
{
if(b >= a[i].p * a[i].c) b -= a[i].p * a[i].c, ans += a[i].c;
else{
ans += b / a[i].p;
break;
}
}
cout << ans << endl;
return 0;
}