一维数组和二维数组求解硬币组合个数问题
来源:互联网 发布:户外拍摄技巧淘宝 编辑:程序博客网 时间:2024/05/22 03:52
1.利用二维数组求解硬币组合问题
private static long countWays_2(int n) {int[] coins = {1,5,10,25};//二维数组的方式long[][] dp = new long[7][n+1];for (int i = 1; i <=n; i++) {dp[0][i] = 0;//用0种硬币凑成i元的组合数为0}for (int i = 0; i < coins.length; i++) {dp[i][0] = 1;//用i种硬币凑成0元的组合数为1}for (int i = 1; i <= coins.length; i++) {for (int j = 1; j <= n; j++) {dp[i][j]= 0;for (int k = 0; k <=j/coins[i-1]; k++) {dp[i][j] += dp[i-1][j-k*coins[i-1]];//dp[i][sum] = dp[i-1][sum - 0*Vm] + ... + dp[i-1][sum - K*Vm]; 其中K = sum / Vm}}}return dp[coins.length][n];}
2.利用一维数组求解硬币组合问题
private static int countWays(int n) {int[] coins = {1,5,10,25};//一维数组int[] dp = new int[100001];//默认为0dp[0] = 1;int len1 = coins.length;for (int i = 0; i < len1; i++) {for (int j = coins[i]; j <= n; j++) {//二级循环从大到小dp[j] = (dp[j]+dp[j-coins[i]])%100000007;}}for (int i = 0; i < dp.length; i++) {if(dp[i]!=0)System.out.print(dp[i]+" ");}System.out.println();return dp[n];}注:何时使用一维数组和二维数组求解动态规划问题可以参考:http://blog.csdn.net/tbwood/article/details/22747215
阅读全文
0 0
- 一维数组和二维数组求解硬币组合个数问题
- 练习LINQ:同时操作二维和一维数组,把二维数组转为一维,计算一维和二维值,字符串组合,计算数组和,数组筛选,排序
- 一维数组和二维数组的传值问题
- iOS (一维数组)--转--(二维数组) 根据(个数)分类
- 关于一维数组和二维数组
- javascript 一维数组和二维数组
- 一维数组和二维数组
- 遍历和二分法求解二维数组中查找问题
- 硬币组合问题之最少硬币个数
- 数组(一维数组和二维数组)的用法
- JAVA 数组 一维数组和二维数组
- JAVA 数组 一维数组和二维数组
- java入门--数组(一维数组和二维数组)
- 最大和问题(一维数组和二维数组)(dp问题)
- 一维数组、二维数组
- 二维数组求解
- Java数组 一维数组,二维数组
- array 数组 一维数组 二维数组
- Spring中ioc介绍
- IntelliJ IDEA 中 右键新建时,选项没有Java class的解决方法和具体解释
- JSP动作标签
- result和break的区别
- dubbo(二)发布dubbo服务
- 一维数组和二维数组求解硬币组合个数问题
- 语句简单知识整理
- 清北学堂-D5-T2-bw
- MongoDB进化论
- Python自学记录
- HIVE实战:简单处理web日志
- transtion过渡;
- 上传自己的代码到github
- 【学习记录】trie树(字典树)