Money Systems


#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的方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章