USACO 3.1 Stamps

#include <stdio.h>
#define DEBUG 1
#define TESTCASES 9
#define MAX_VALUES 50
#define MAX_TOTALVALUE 2000000

int valueArray[MAX_VALUES + 1];
int numOfStamps, numOfValues;
int minStampsArray[MAX_TOTALVALUE + 1];

int main(){
#if DEBUG
	int testCase;
	for (testCase = 1; testCase <= TESTCASES; testCase++){
		char inputFileName[20] = "inputx.txt";
		inputFileName[5] = '1' +  (testCase - 1);
		freopen(inputFileName, "r", stdin);
		printf("\n#%d\n", testCase);
#endif

	scanf("%d%d", &numOfStamps, &numOfValues);
	int i;
	for (i = 1; i <= numOfValues; i++)
		scanf("%d", &valueArray[i]);

	int totalValue = 1;
	int minStamps;
	//遍歷每個分值,通過遍歷各種郵票來計算貼夠這個分值所需的最少郵票數
	while (1){
		minStamps = 300;
		for (i = 1; i <= numOfValues; i++)
			if (totalValue - valueArray[i] >= 0 && minStampsArray[ totalValue - valueArray[i] ] + 1 < minStamps)
				minStamps = minStampsArray[ totalValue - valueArray[i] ] + 1;
		if (minStamps > numOfStamps)
			break;
		minStampsArray[totalValue] = minStamps;
		totalValue++;
	}

	printf("%d\n", totalValue - 1);	

#if DEBUG
	}
#endif
	return 0;
}

發佈了187 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章