POJ1384 完全揹包問題

簡單題,給定一些種類的硬幣以及他們各自的重量和價值,求一定總重量的硬幣的最小价值,並且要判斷揹包裝不滿的情況。

#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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章