多重背包
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXV 10001
#define MAXN 501
#define INF 0x3f3f3f3f
int w[MAXN], p[MAXN], dp[MAXV];
int complete_knapsack(int max_v, int n)
{
fill(dp, dp+max_v+1, INF); dp[0] = 0;
for(int i = 0; i < n; i ++) {
for(int v = 0; v <= max_v-w[i]; v ++) {
if( INF != dp[v] && dp[v+w[i]] > dp[v]+p[i] ) {
dp[v+w[i]] = dp[v]+p[i];
}
}
}
return dp[max_v];
}
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("test.in", "r", stdin);
#endif
int cas, full, empty, n, ans;
scanf("%d", &cas);
while( cas -- ) {
scanf("%d %d %d", &empty, &full, &n);
for(int i = 0; i < n; i ++) {
scanf("%d %d", &p[i], &w[i]);
}
ans = complete_knapsack(full-empty, n);
if( INF == ans ) {
printf("This is impossible.\n");
}
else {
printf("The minimum amount of money in the piggy-bank is %d.\n", ans);
}
}
return 0;
}
hdu_1114
最新推荐文章于 2021-07-13 16:24:30 发布