【完全揹包問題】有1,2...K種類型的dollar,求組成價值爲N的方法有多少種
//完全揹包問題
//有1,2...K種類型的dollar,求組成價值爲N的方法有多少種。
#include <stdio.h>
int nums[1001]; //組成最大dollar值N的總情況數,1<=N<=1000
#define MAXCASES 100000000
int main(void)
{
int tc, T;
int N=0, K=0;
int i=0,j=0;
scanf("%d", &T);
for(tc = 0; tc < T; tc++)
{
scanf("%d %d", &N,&K);
nums[0] = 1; //init,這使得<使用i==1的dollar(物品)組成N>的情況數是1:1xN=N
for(i=1; i<1001; i++)
{
nums[i] = 0;
}
for(i=1; i<=K; i++) //K種可供選擇的dolloar
{
for(j=i; j<=N; j++) //i~N
{
nums[j] = (nums[j] + nums[j-i]) % MAXCASES; //組成J的情況數是:<使用了i dolloar情況數> + <只使用前i-1種dollar的情況數>
}
}
printf("%d\n", nums[N]);
}
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.