给定 NN 个正整数 A1,A2,…,ANA1,A2,…,AN,从中选出若干个数,使它们的和为 MM,求有多少种选择方案。
输入格式
第一行包含两个整数 NN 和 MM。
第二行包含 NN 个整数,表示 A1,A2,…,ANA1,A2,…,AN。
输出格式
包含一个整数,表示可选方案数。
数据范围
1≤N≤1001≤N≤100,
1≤M≤100001≤M≤10000,
1≤Ai≤10001≤Ai≤1000,
答案保证在 int 范围内。输入样例:
4 4 1 1 2 2
输出样例:
3
//01背包求方案数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=10010;
int f[N];//当和为n时的方案数目
int main(){
int n,m;
cin>>n>>m;
f[0]=1;//和为0,方案数为1
for(int i=0;i<n;i++){
int v;
cin>>v;
for(int j=m;j>=v;j--){
f[j]+=f[j-v];
}
}
cout<<f[m]<<endl;
return 0;
}