给一个数组,里面存的钱的各种面币
比如 人民币的 1元 5元 10元 20元 50元 100元
现在问你 给我 5元,那么 有两种方法:5张1元或1张5元
如果是 1000元呢?共有多少中方法?
典型的动态规划题目
一般动规需要申请一个二维数组进行迭代,并初始化第一行和第一列
但是如果dp第一列全是一样的就不用专门设置二维数组来进行迭代
package Algorithm;
import java.util.Arrays;
import javax.swing.JWindow;
class Solution {
public static int change(int[] arr,int N) {
int[] dp = new int[N+1];
for(int i=0;i<dp.length;i++)
dp[i] = 0;
dp[0] = 1;
//0元总有一种方法组成 就是 不用钱 哈哈
for(int i=0;i<arr.length;i++) {
for(int j=0;j+arr[i]<dp.length;j++) {
dp[j+arr[i]] += dp[j];
//已经存在的表示不用arr[i]这个面币的办法
//新加的arr[i]表示用上arr[i]的办法
}
}
return dp[N];
}
public static void main(String[] args) {
int[] arr = {5,10,25,1};
System.out.println(Solution.change(arr,1000));
}
}