tyvj p 1096 0-1リュックサック種数を求める
N個の数の中でその和がMのいくつかの数を探し出す.正の整数N(1
入力形式Input Format
1行目はNとMを表す2つの数字です.2行目からN個の数です.
出力フォーマットOutput Format
1つの数字について、Mの組み合わせの個数を表します.
サンプル入力Sample Input[データのコピー]
4 4 1 1 2 2
サンプル出力Sample Output[コピーデータ]
3
時間制限時間
各試験点1 s
//d[j]=d[j]+d[j-a[i]], j=0 , , d[0]=1;
#include <iostream>
#include <cstring>
using namespace std;
int a[105],d[10005];
int main()
{
int n,m,i,j;
while(cin>>n>>m)
{
for(i=1;i<=n;i++) cin>>a[i];
memset(d,0,sizeof(d));
d[0]=1;
for(i=1;i<=n;i++)
for(j=m;j>=a[i];j--)
d[j]=d[j]+d[j-a[i]];
cout<<d[m]<<endl;
}
return 0;
}