50分求助
查看原帖
50分求助
1258100
wanttoac楼主2024/3/25 11:41
#include<iostream>
#include<algorithm>
#include <climits>
using namespace std;
int dp[505][2005];//表示使用前i种饮料,总容量不小于j的最小花费
pair<int, int>beverage[505];
int main() {
	int n, l,cnt=0;
	cin >> n >> l;
	for (int i = 1; i <= n; i++) {
		cin >> beverage[i].first >> beverage[i].second;
		cnt += beverage[i].second;
	}
	if (cnt < l) {
		cout << "no solution";
		return 0;
	}
	for (int i = 0; i <= n; i++) {
		for (int j = 0; j <= l; j++) {
			dp[i][j] = INT_MAX;
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= l; j++) {
			if (j < beverage[i].second)
				dp[i][j] = min(dp[i - 1][j], beverage[i].first);
			else
				dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - beverage[i].second] + beverage[i].first);
		}
	}
	cout << dp[n][l];
	return 0;
}

2024/3/25 11:41
加载中...