POJ 1384 Piggy-Bank (完全背包)

#include <stdio.h>
#define INF ( (1 << 30) - 1 )
#define MAX_KINDS_COINS 500
#define MAX_WEIGHT 10000

int emptyWeight, filledWeight;
int weightLimit;
int kindsOfCoins;
int value[MAX_KINDS_COINS + 1];
int weight[MAX_KINDS_COINS + 1];
int minValue[MAX_WEIGHT + 1];

int main(){

	int testCases;
	scanf("%d", &testCases);
	while (testCases--){
		scanf("%d%d", &emptyWeight, &filledWeight);
		scanf("%d", &kindsOfCoins);
		int coin;
		for (coin = 1; coin <= kindsOfCoins; coin++)
			scanf("%d%d", &value[coin], &weight[coin]);

		weightLimit = filledWeight - emptyWeight;
		int i;
		for (i = 1; i <= weightLimit; i++)
			minValue[i] = INF;
		minValue[0] = 0;
	
		int preCoins, lowerWeight, totalWeight, tempValue;
		for (preCoins = 1; preCoins <= kindsOfCoins; preCoins++){
			lowerWeight = weight[preCoins];
			for (totalWeight = lowerWeight; totalWeight <= weightLimit; totalWeight++){
				tempValue = minValue[totalWeight - lowerWeight] + value[preCoins];
				if (tempValue < minValue[totalWeight])
					minValue[totalWeight] = tempValue;
			}	
		}
		
		if (minValue[weightLimit] == INF)
			printf("This is impossible.\n");
		else
			printf("The minimum amount of money in the piggy-bank is %d.\n", minValue[weightLimit]);  

	}

	return 0;
}

你可能感兴趣的:(动态规划,poj,完全背包,1384,Piggy-Bank)