【第七届河南省赛】A.物资调度

来源:互联网 发布:python dom解析xml 编辑:程序博客网 时间:2024/04/30 06:17

Description

某地区发生了地震,灾区已经非常困难,灾民急需一些帐篷、衣物、食品和血浆等物资。可通往灾区的道路到处都是塌方,70%以上的路面损坏,桥梁全部被毁。国家立即启动应急预案,展开史上最大强度非作战空运行动,准备向灾区空投急需物资。

一方有难,八方支援。现在已知有N个地方分别有A1A2,….,An个物资可供调配。目前灾区需要物资数量为M

现在,请你帮忙算一算,总共有多少种物质调度方案。

假设某地方一旦被选择调配,则其物资数全部运走。

Input

第一行: K     表示有多少组测试数据。

接下来对每组测试数据有2行,第1:  N  M

                            第2行:A1  A2 ……  An

2K8     1<N100   1<M1000     1 Ai1000 

所有数据都是正整数。输入数据之间有一个空格。

假设给定的数据至少有一种调度方案。

Output

对于每组测试数据,输出一行:物资调度的总方案数

Sample Input

2
4 4
1 1 2 2
4 6
1 1 2 2

Sample Output

3
1


#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define MAX(a,b) a>b?a:bint num[110],sum;int n,m;void dfs(int s,int w)//s是搜索到的件数,w是当前数量{    int i;     if(s>n||w>m)        return;    if(w==m&&s<=n)    {        sum++;        return;    }    dfs(s+1,w+num[s]);    dfs(s+1,w);}int main(){    int k,i;    scanf("%d",&k);    while(k--)    {        sum=0;        scanf("%d%d",&n,&m);        for(i=0; i<n; i++)            scanf("%d",&num[i]);        dfs(0,0);        cout<<sum<<endl;    }    return 0;}



0 0
原创粉丝点击