您的位置:首页 > 其它

POJ1384 完全背包问题

2014-11-17 15:14 239 查看
简单题,给定一些种类的硬币以及他们各自的重量和价值,求一定总重量的硬币的最小价值,并且要判断背包装不满的情况。

#include <stdio.h>
#include <iostream>
using namespace std;
#define inf 0x3f3f3f3f

int f[5000000];

int min (int a, int b)
{
return a>b ? b : a;
}

void CompletePack (int *f, int c, int w, int v)
{
for(int i = c; i <= v; i++)
f[i] = min (f[i], f[i-c] + w);
}

int main ()
{
int T;
scanf ("%d", &T);
while(T--)
{
int E,F,N,V;
int C[505],W[505]; // C -> Cost , W -> Wealth
int i,j,k;
scanf ("%d%d", &E, &F);
V = F - E;
scanf ("%d", &N);
for(i = 0; i < N; i++)
scanf ("%d%d", &W[i], &C[i]);
for(i = 1; i <= V; i++)
f[i] = inf;
f[0] = 0;
for(j = 0; j < N; j++)
CompletePack(f, C[j], W[j], V);
if(f[V] >= inf)
printf ("This is impossible.\n");
else
printf ("The minimum amount of money in the piggy-bank is %d.\n", f[V]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: