【完全揹包問題】有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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章