码迷,mamicode.com
首页 > 其他好文 > 详细

硬币组合问题

时间:2015-04-04 16:37:03      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

问题描述:

    有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定target分钱,求有多少种组合可以组合成target分钱?(2012创新工场)

解答:(基于深度优先的递归)

#include <iostream>
#include <vector>
using namespace std;
void dfs(int index, int total, int target, int &count, vector<int> res, vector<vector<int>> &ans, int A[],int n)
{
	if(total>target)return;
	if(total==target)
	{
// 		cout<<"count="<<count<<endl;
// 		for (int i=0;i<res.size();i++)
// 		{
// 			cout<<res[i]<<"  ";
// 		}
// 		cout<<endl;
		ans.push_back(res);
		count++;
		return;
	}
	for (int i=index;i<n;i++)
	{
		total+=A[i];
		res.push_back(A[i]);
		dfs(i,total,target,count,res,ans,A,n);
		res.pop_back();
		total-=A[i];
	}
}
int main()
{
	int A[]={1, 2, 5, 10};
	int n=sizeof(A)/sizeof(int);
	int index=0;
	int total=0;
	int target=18;
	int count=0;
	vector<int> res;
	vector<vector<int>> ans;
	dfs(index, total, target, count, res, ans, A, n);
	cout<<"共有count="<<count<<endl;
	for (int i=0;i<ans.size();i++)
	{
		for (int j=0;j<ans[i].size();j++)
		{
			cout<<ans[i][j]<<"  ";
		}
		cout<<endl;
	}
	return 0;
}

  

硬币组合问题

标签:

原文地址:http://www.cnblogs.com/Vae98Scilence/p/4392304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!