子问题定义: 定义一个二维数组b,其中b[i][j]表示用i个硬币是否能兑换价格j,表示第i个币种的面值,

递归关系:

初值设定:

求解顺序:

按下标从小到大依次求解数组b每一列的值,最后二维数组b的右下角元素值即为最终的解。

  1. package org.xiu68.ch06.ex7;
  2.  
  3. public class Ex6_19 {
  4. //数量无限的面值为x1,x2,x3,...,xn的硬币是否能兑换价格v,并且最多只能使用k枚硬币
  5. public static void main(String[] args) {
  6. // TODO Auto-generated method stub
  7. int[] x2=new int[]{5,10};
  8. convertChange(x2, 55, 6);
  9. convertChange(x2, 65, 6);
  10. System.out.println("***********************");
  11. int[] x=new int[]{3,4};
  12. for(int i=0;i<=15;i++)
  13. convertChange(x,i,2);
  14. }
  15. //coin:硬币面值
  16. //v:要兑换的价格
  17. //k:最多使用k枚硬币
  18. public static void convertChange(int[] x,int v,int k){
  19. boolean b[][]=new boolean[k+1][v+1]; //b[i][j]表示能否最多使用i枚硬币兑换价格j
  20.  
  21. for(int i=0;i<=k;i++)
  22. b[i][0]=true; //价格0不需要硬币兑换
  23.  
  24. for(int j=1;j<=v;j++) //不使用硬币则不可以兑换任何大于0的价格
  25. b[0][j]=false;
  26.  
  27. //寻找用p枚硬币是否能兑换价格i
  28. for(int i=1;i<=v;i++){
  29. for(int p=1;p<=k;p++){
  30. for(int j=0;j<x.length;j++){
  31.  
  32. if(i>=x[j] &&b[p-1][i-x[j]]==true){ //能用p枚硬币是否能兑换价格i
  33. b[p][i]=true;
  34. break;
  35. }else{ //不能用p枚硬币是否能兑换价格i
  36. b[p][i]=false;
  37. }
  38.  
  39. }//for3
  40. }//for2
  41. }//for1
  42. System.out.println(v+":"+b[k][v]);
  43. }
  44. //运行结果
  45. /* 55:true
  46. 65:false
  47. ***********************
  48. 0:true
  49. 1:false
  50. 2:false
  51. 3:true
  52. 4:true
  53. 5:false
  54. 6:true
  55. 7:true
  56. 8:true
  57. 9:false
  58. 10:false
  59. 11:false
  60. 12:false
  61. 13:false
  62. 14:false
  63. 15:false*/
  64. }

Ex 6_19 至多用k枚硬币兑换价格_第七次作业的更多相关文章

  1. Ex 6_17 数量无限的硬币兑换问题_第七次作业

    子问题定义:定义一个数组b,大小比兑换价格的大小多一个元素,其中b[i]表示是否能用面值为x1,x2,x3,..,xn的硬币兑换价格i. 递归关系: 初值设定:设b[0]=true 求解顺序:按下标从 ...

  2. Ex 6_18 硬币有限的兑换问题_第七次作业

    子问题定义: 定义一个二维数组b,其中b[i][j]表示前i个币种是否能兑换价格j,表示第i个币种的面值,第i个币种的使用有两种情况,若使用,则b[i][j]=b[i-1][j-],若不使用,则b[i ...

  3. xth的第 12 枚硬币(codevs 1366)

    题目描述 Description 传说 xth 曾经拥有11枚完全相同硬币(你懂得),不过今年呢,rabbit又送了他一 枚硬币.这枚硬币和其他硬币外观相同,只有重量不同,或轻或重.Xth 一不小心, ...

  4. 1366 xth 的第 12 枚硬币

    1366 xth 的第 12 枚硬币  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 传说 xth 曾 ...

  5. 问题 D: 小k的硬币问题

    问题 D: 小k的硬币问题 时间限制: 1 Sec  内存限制: 128 MB提交: 21  解决: 5[提交] [状态] [命题人:jsu_admin] 题目描述 小k和小p一起玩一个游戏,有n堆硬 ...

  6. n枚硬币问题(找假币)

    问题描述: 在n枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重.可以通过一架天平来任意比较两组硬币,设计一个高效的算法来检测这枚假币. 解题思路: ...

  7. Java实现8枚硬币问题(减治法)

    1 问题描述 在8枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重.可以通过一架天平来任意比较两组硬币,设计一个高效的算法来检测这枚假币. 2.1 减 ...

  8. BZOJ_2017_[Usaco2009 Nov]硬币游戏_博弈论+DP

    BZOJ_2017_[Usaco2009 Nov]硬币游戏_博弈论+DP Description 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为“Xoinc”的两人硬币游戏. 初始时,一个有N(5 ...

  9. BZOJ_1042_[HAOI2008]硬币购物_容斥原理+背包

    BZOJ_1042_[HAOI2008]硬币购物_容斥原理+背包 题意: 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买s i的价值 ...

随机推荐

  1. Flash与JavaScript互动

    最近做的一个项目需要用javascript来实现自动复制文本到剪切板,但测试时发现只有ie6.0支持. 到百度搜索后才发现,原来ie7.0.firefox是不支持这样的操作的,随后又搜索了一下,找到一 ...

  2. 使用php与mysql构建我们的网站

    技术这个玩意就是要不断的去使用,才能够熟能生巧.今天我记录的使用php与mysql构建我们的网站,其实是我两年前的时候写的项目. 现在看看自己以前写的个人项目,也会感叹时间究竟带走了什么?好记性不如烂 ...

  3. Linux运行Java出现“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”报错

    在运行如下程序时出现“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”报错: java ...

  4. STM32 一直进入串口接收中断

    解决方法一: .串口初始化配置时,需要打开ORE 溢出中断,否则串口中断没有及时读取数据会触发溢出中断(打开接收中断默认开启溢出中断,但是为了读取溢出标志位还需要明确执行以下打开溢出中断),如果没有清 ...

  5. 第2课:什么是SQL注入

    SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义. 随着B/S模式被广泛的应用,用这种模式编写应用程序的程序员也越来越多,但由于开发人员的水 ...

  6. 常用的一些js方法

    <input type="text" name="number" onkeyup="floatNum(this)"/> // 数 ...

  7. SqlServer中的临时表

    一.什么是临时表 临时表属于会话级的,会话结束的时候,临时表被释放,其创建.使用.删除都和普通表一样,临时表空间一般利用虚拟内存,不必进行磁盘I/O,因此效率较高..临时表有两种:普通临时表 (#Tb ...

  8. POJ - 1850 Code(组合数学)

    https://vjudge.net/problem/POJ-1850 题意 输出某字符串在字典中的位置.字符串不合规则时输出0. 分析 首先判断字符串合法性,也就是判断是不是升序排列的.如果符合,以 ...

  9. memcache的下载与安装

    memcache的安装: 建议安装1.4.4版本 Windows 下安装 Memcached 官网上并未提供 Memcached 的 Windows 平台安装包,我们可以使用以下链接来下载,你需要根据 ...

  10. JavaScript数组倒序函数reverse()

    左边为原数组,右边为array.reverse()的结果: 函数很简单,但是 var temp = ChartConfig.getMonthData(); $scope.monthList = tem ...