如:有1分,2分,5分,10分四种硬币,每种硬币无限,给定Target分钱,求多少种组合可以合成Target分钱?
// ShangJi.cpp : 定义控制台应用程序的入口点。
#include <iostream>
#include<vector>
using namespace std;
int count=0;
int Target=0;
int coin[4]={1,2,5,10};
int total=0;
vector<int> solution;
void dfs(int index)
{
if(total==Target)
{
count++;
cout<<count<<":";
for (int i=0;i<(int)solution.size();i++)
{
cout<<solution[i]<<" ";
}
cout<<endl;
return;
}
if(total>Target)
return;
for (int i=index;i<4;i++)
{
total += coin[i];
solution.push_back(coin[i]);
dfs(i);
solution.pop_back();
total -= coin[i];
}
}
int _tmain(int argc, _TCHAR* argv[])
{
count = 0;
cin>>Target;
dfs(0);
cout<<"总共有"<<count<<"种"<<endl;
return 0;
}