题意:用小猪存钱罐存钱,现在告诉你存钱罐的质量,存钱罐+钱的质量和各种钱的质量以及面值,问存钱罐里面最少有多少钱
很简单的完全背包,是道模板题,和一般情况下不同的是把求最大换成了求最小,那我们把模板的max换成min就可以了
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 11000;
int dp[N];
struct node {
int val;
int wei;
}date[N];
int main() {
ios::sync_with_stdio(false);
int t;
cin >> t;
for (int Case = 1; Case <= t; Case++) {
memset(dp, inf, sizeof(dp));
int pw, mw;
cin >> pw >> mw;
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> date[i].val >> date[i].wei;
}
mw = mw - pw;
dp[0] = 0;
for (int i = 1; i <= n; i++) {
for (int j = date[i].wei; j <= mw; j++) {
dp[j] = min(dp[j], dp[j - date[i].wei] + date[i].val);
}
}
if (dp[mw] !=inf) {
cout << "The minimum amount of money in the piggy-bank is " << dp[mw] << "." << endl;
}
else {
cout << "This is impossible." << endl;
}
}
}