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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值