【題目描述】
有n個正整數,找出其中和爲t(t也是正整數)的可能的組合方式。如:
n=5,5個數分別爲1,2,3,4,5,t=5;
那麼可能的組合有5=1+4和5=2+3和5=5三種組合方式。
【輸入】
輸入的第一行是兩個正整數n和t,用空格隔開,其中1≤n≤20,表示正整數的個數,t爲要求的和(1≤t≤1000);
接下來的一行是n個正整數,用空格隔開。
【輸出】
和爲t的不同的組合方式的數目。
【輸入樣例】
5 5 1 2 3 4 5
【輸出樣例】
3
// Created on 2020/2/19
/*#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <climits>*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int idata=1000+5;
const int inf=0x3f3f3f3f;
int n,m,t;
int minn=INT_MAX,maxx=INT_MIN;
ll sumfee[idata];
//int valu[idata],tim[idata];
int digit[idata];
int i,v,j;
inline void initial()
{
for(i=1;i<=n;i++)
cin>>digit[i];
sumfee[0]=1;
return ;
}
int main()
{
cin>>n>>t;
initial();
for(i=1;i<=n;i++)
{
for(j=t;j>=digit[i];j--)//一定要逆序,否則就成了完全揹包了
{
sumfee[j]+=sumfee[j-digit[i]];
}
}
cout<<sumfee[t]<<endl;
return 0;
}