我就是想着能用性价比高的就优先用 用完了之后的余数拿性价比低的补(最多100个)
这个思路有错吗 不知道为什么错了
#include <bits/stdc++.h>
#define int long long
#define debug cout<<endl<<"--------"<<endl;
using namespace std;
const int range = 2e5 + 10;
int n;
int x;
int a[range];
int p[range];
int b[range];
int q[range];
bool check(int mid) {
//最多100个不选
//mid是生产能力
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += mid / a[i] * p[i];
int cy = mid % a[i];
int money = p[i];
for (int j = 0; j <= 100; j++) {
int cost = j * q[i];
int val = b[i] * j;
if (val >= cy) {
money = min(money, cost);
break;
}
}
sum += money;
}
if (sum <= x)
return 1;
return 0;
}
void solve() {
cin >> n >> x;
for (int i = 1; i <= n; i++) {
cin >> a[i] >> p[i] >> b[i] >> q[i];
//一个产品的成本多少钱
if (p[i] * 1.0 / a[i] > q[i] * 1.0 / b[i]) {
swap(a[i], b[i]);
swap(p[i], q[i]);
}
}
int l = 0;
int r = 2e9;
int ans = 0;
while (l <= r) {
int mid = l + r >> 1;
if (check(mid)) {
ans = mid;
l = mid + 1;
} else r = mid - 1;
}
cout << ans << endl;
return ;
}
signed main() {
ios::sync_with_stdio();
cin.tie(0);
cout.tie(0);
solve();
}