题目描述
N=5,有3种方式:5,2+3,1+4。
注意相同加数不同排列计算为一个,比如1+2+3,2+1+3和3+1+2等算作一个子集和。
输入
n 1 n 20 n N 1 N 2000).
输出
mod100999.
示例输入
4 5 6 10 200
示例输出
3 4 10 50568
提示
#include <stdio.h>
#include <string.h>
int dp[2003];
int main()
{
int n, i, j, x ,k;
scanf("%d",&n);
while(n--)
{
memset(dp,0,sizeof(dp));
dp[0]=1;
scanf("%d",&x);
for(k=1; k<=x; k++)
{
for(j=2001; j>=k; j--)
{
dp[j]=(dp[j]+dp[j-k])%100999;
}
}
printf("%d\n",dp[x]);
}
return 0;
}