#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include <map>
using namespace std;
long long ans;
int n,sum,len[30];
int d[30];
void dfs(int n,int s){
if(s==0){
ans++;
//cout<<n<<" "<<s<<endl;
return;
}
if(s<0 || n<0){
return;
}
for(int i=0;i<=len[n];i++){
dfs(n-1,s-i*d[n]);
//cout<<"n-1="<<n-1<<" i= "<<i<<" s-i*d[n]= "<<s-i*d[n]<<endl;
}
}
int main(){
ofstream fout ("money.out");
ifstream fin ("money.in");
fin>>n>>sum;
for(int i=0;i<n;i++){
fin>>d[i];
len[i]=sum/d[i];
//cout<<d[i]<<" "<<len[i]<<endl;
}
dfs(n-1,sum);
fout<<ans<<endl;
}
对于数据:
10 100
1 2 3 4 5 6 7 8 9 10
超时
需要使用dp的方法