zoukankan      html  css  js  c++  java
  • 初级硬币问题

    已知,有一批不同面值的硬币,没有硬币个数限制,求得到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("
    ");
    	}
    	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
    ", Goal);
    	set = new int [Len];
    	memset(set, 0 , sizeof(int)*Len);
    	int cur = 0;
    	LeastCoin(Value, Len, Goal,  cur);
    	printf("Max:%d 
    ", Max);
    	printf("Min:%d 
    ", Min);
    
    }
    

      

  • 相关阅读:
    LINUX按键驱动程序
    s3c2440地址分配
    Linux内核代码
    C语言初始化
    tftp协议
    ARM工作模式
    Bootstrap3隐藏滑动侧边栏菜单代码特效
    javascript 中slice,substr,substring方法的对比
    vue 的简述
    鼠标移动出自己想要的效果
  • 原文地址:https://www.cnblogs.com/welen/p/3942286.html
Copyright © 2011-2022 走看看