最简单的动态规划找零算法

package swTest;


/**
 * 动态规划学习
 * 1 找零问题 1,3,5 分的零钱,找11分钱,怎样个数最少
 * 采用动态规划的方法:
 *   @author samsung
 *   
 */
public class Test19 {
//	static    int[] change=new  int[]{1,3,5}; // 基础硬币数量
    static  int  conMum[] = new  int[99];  //对应的找零最小个数,保存最优状态
   
   static public void main(String[] arg){
	   conMum[0] = 0;
	   conMum[1] = 1;
	   conMum[2] = 2;
	   conMum[3] = 1;
	   conMum[4] = 2;
	   conMum[5] = 1;
	    //初始化数量
	 for(int i=6;i<99;i++){
		 concount(i); //规划求解
	 }
	 System.out.println(conMum[11]); //输出 11分就是 conMun[11];
   }
   
   /**
    * 函数 返回 面值 硬币的最小个数
    * @param con  面值
    * @param con1 硬币
    * @return
    */
   static void concount(int con){
		   conMum[con] = min(conMum[con-1]+1, conMum[con-3]+1, conMum[con-5]+1); 
		   //基本表达式就是这个
   }
   
   static int min(int a,int b,int c){
	    return Math.min(Math.min(a, b),c);
   }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值