ABC374 wa30多个求调附思路
查看原帖
ABC374 wa30多个求调附思路
226167
呆呆的她啊楼主2024/10/27 00:35

我就是想着能用性价比高的就优先用 用完了之后的余数拿性价比低的补(最多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();
}

2024/10/27 00:35
加载中...