题目链接:点击打开链接
题目大意:知道一堆硬币的重量,还知道每一种硬币的面值和重量,求这堆硬币最小的价值。
解题思路:完全背包问题,当时没好好学,哭唧唧
代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string>
#include<set>
#include<map>
#include<vector>
#include<iomanip>
#include<stack>
#include<queue>
#define FAST ios::sync_with_stdio(fasle)
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int mod = (int)1e9 + 7;
const int maxn = (int)1e5 + 5;
using namespace std;
int dp[maxn];
int v[maxn], w[maxn];
int main()
{
int t; scanf("%d", &t);
while(t--){
int e, f; scanf("%d %d", &e, &f);
int V = f - e;
int n; scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d %d", &v[i], &w[i]);
}
for(int i = 0; i <= V; i++) dp[i] = inf;
dp[0] = 0;
for(int i = 0; i < n; i++){
for(int j = w[i]; j <= V; j++){
dp[j] = min(dp[j], dp[j-w[i]] + v[i]);
}
}
if(dp[V] == inf) puts("This is impossible.");
else printf("The minimum amount of money in the piggy-bank is %d.\n", dp[V]);
}
return 0;
}
over