http://wenda60.com/?programs.exam/a0bb3b20flzEY8AwZTTUBHBlYBUlRVAFMBVUpFSw
题目描述
完美世界最新的客户端游戏大作笑傲江湖最近已经开始测试了,由于希望参与的玩家太多,只能使用激活码的方式让一部分玩家可以参与测试,现在需要一个测试码的生成规则。
如从一组不重复的数字中获得随机几个数字组成验证码,其中只要是这些数字相加的和为相同的那么就认为是同一组验证码,最后希望获得一共有多少组有效验证码。
现在希望获得从一组N不同的数字中,获得和为C 的组个的个数。组合的个数有可能是1个 有可能是N个 。
输入格式
第一行输入1个整数M,表示总得数据组数。
第二行输入1个整数 2 < N < 100,表示需要输入的不同的数字的个数
第三行输入1个整数 C ,表示数字的和
第四行输入N个不同数字(数字>0)中间用逗号隔开, 0 < 单个数字 <= 100
测试格式
按照和为result 的验证码的总数量。
输入样例:
2
4
3
11 ,2, 3, 1
3
3
1,2,3
输出样例
2
2
比如4个数字
1,2,3,4 组合成7是几个
1,2,4
3,4
考虑0 1 2 3 4 5 6 7
0 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0
2 1 1 1 1 0 0 0 0
3 1 1 1 2 1 1 1 0
4 1 1 1 2 2 2 2 2
背包dp
#include<stdio.h> int dp[10099]; int shu[109]; int main(){ int i,j; int t,n,sum; while(scanf("%d",&t)!=EOF){ while(t--){ scanf("%d%d",&n,&sum); scanf("%d",&shu[1]); for(i=2;i<=n;i++){ scanf(",%d",&shu[i]); } dp[0]=1; for(i=1;i<=sum;i++)dp[i]=0; for(i=1;i<=n;i++){ for(j=sum;j>=0;j--){ if(dp[j]>=1)dp[shu[i]+j]+=dp[j]; } } printf("%d\n",dp[sum]); } } return 0; }
浙公网安备 33010602011771号