【完全背包问题】有1,2...K种类型的dollar,求组成价值为N的方法有多少种

来源:互联网 发布:adobe软件多少钱 编辑:程序博客网 时间:2024/05/29 08:36


//完全背包问题
//有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;
}
0 0