首页 > 其他 > 详细

[程序员代码面试指南]递归和动态规划-换钱的方法数

时间:2019-05-11 00:34:01      阅读:164      评论:0      收藏:0      [点我收藏+]

题目描述

给定arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim,求组成aim的方法数

解题思路

和上一题的转移来的状态完全相同。
转移方程改为:
dp[i][j]=dp[i-1][j]+dp[i][j-arr[i]]

代码

package DP;

public class Coin {
    public int getMeansCnt(int arr[],int aim){
        int[] dp=new int[aim+1];
        
        //initial 
        for(int j=0;j<=aim;++j) {
            dp[j]=0;
        }
        for(int j=0,k=0;j*k<=aim;++k) {
            if(j==0) {
                dp[j]=1; 
            }
            else if(j*k==arr[0]) {
                dp[j*k]=1;
            }
        }
        
        for(int i=0;i<arr.length;++i) {
            for(int j=arr[i];j<=aim;++j) {
                dp[j]=dp[j]+dp[j-arr[i]];
            }
        }
        
        return dp[aim];
    }
}

[程序员代码面试指南]递归和动态规划-换钱的方法数

原文:https://www.cnblogs.com/coding-gaga/p/10847373.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!