链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114
思路:最小完全背包模板题
Code:
#include<bits/stdc++.h>
#define inf 0x7ffffff
using namespace std;
int dp[10005], e, f;
void cp(int value, int w) {
for(int i = w; i <= f - e; i++)
dp[i] = min(dp[i - w] + value, dp[i]);
}
int main() {
int T, n, p, w, i;
scanf("%d", &T);
while(T--) {
dp[0] = 0;
scanf("%d%d%d", &e, &f, &n);
for(i = 1; i <= f - e; i++) dp[i] = inf;
for(i = 1; i <= n; i++) {
scanf("%d%d", &p, &w);
cp(p, w);
}
if(dp[f-e]==inf)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n", dp[f - e]);
}
}