#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;
}
USACO 3.1 Stamps
最新推荐文章于 2020-12-08 16:21:22 发布