0基础硬币问题

Posted ljbguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0基础硬币问题相关的知识,希望对你有一定的参考价值。

已知,有一批不同面值的硬币,没有硬币个数限制。求得到S的全部组合,以及最小。最大硬币个数。

最小、最大硬币个数能够用贪心法,可是不一定能够得到有效解,可是能够提高结题速度。此处略。

以下的解法比求解最大、最小硬币比較耗时。

static int* set;

static int  Min = 1<<10;
static  int Max = 0;

void LeastCoin(int* Value, int Len, int Goal, int cur) 
{
	if(Goal == 0) 
	{
		for(int i = 0; i < cur; i++)
		{
			printf("%d ", set[i]);
		}
		if(cur > Max)
		{
			Max = cur;
		}
		if(Min > cur)
		{
			Min = cur;
		}
		printf("\n");
	}
	else
	{
		for(int i = 0; i < Len; i++)
		{
			
			if(Goal >= Value[i])
			{
				int ok = 1;
				for(int j = 0; j < cur; j++)
				{
					if(set[j] > Value[i])
					{
						ok = 0;
						break;
					}				
				}
				if(ok)
				{				
				   set[cur] = Value[i]; 
				   LeastCoin(Value, Len, Goal - Value[i], cur + 1); 				
				}
			}		

		}
		
	}

}

void WLeastCoin(int* Value, int Len, int Goal)  
{

	printf("goal: %d\n", Goal);
	set = new int [Len];
	memset(set, 0 , sizeof(int)*Len);
	int cur = 0;
	LeastCoin(Value, Len, Goal,  cur);
	printf("Max:%d \n", Max);
	printf("Min:%d \n", Min);

}


以上是关于0基础硬币问题的主要内容,如果未能解决你的问题,请参考以下文章

算法设计与分析基础20动态规划-硬币搜集问题

博弈论基础

LeetCode排列硬币

硬币游戏—— 代码分析与改进

51nod 1381概率与期望(内含基础知识)硬币游戏

51nod 1381概率与期望(内含基础知识)硬币游戏