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

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

递归关系:

初值设定:

求解顺序:

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

 1 package org.xiu68.ch06.ex7;
 2
 3 public class Ex6_18 {
 4
 5     //面值为x1,x2,x3,...,xn的硬币是否能兑换价格v,每个硬币只能使用一次(解法有点类似于0-1背包问题)
 6     public static void main(String[] args) {
 7         // TODO Auto-generated method stub
 8         int[] x=new int[]{1,3,5,6};
 9         for(int i=0;i<=20;i++)
10             convertChange(x, i);
11     }
12     //coin:硬币面值
13     //v:要兑换的价格
14     public static void convertChange(int[] x,int v){
15         boolean[][] b=new boolean[x.length+1][v+1];       //b[i][j]表示使用前i个币种是否能兑换价格j
16         for(int i=0;i<=x.length;i++)
17             b[i][0]=true;                    //表示任何币种可以兑换价格0
18         for(int j=1;j<=v;j++)
19             b[0][j]=false;                     //没有硬币则不可以兑换任何大于0的价格
20
21         for(int i=1;i<=x.length;i++){
22             for(int j=1;j<=v;j++){
23
24                     boolean use=false;
25                     if(j>=x[i-1])                        //价格j要大于等于第i个币种才能用第i个币种兑换
26                         use=b[i-1][j-x[i-1]];              //使用第i个币种的情况 ,x[i-1]:第i个币种下标为i-1
27                     boolean nuse=b[i-1][j];                //不使用第i个硬币的情况
28
29                     if(use || nuse)                       //只要有一种情况可以兑换则前i个币种能兑换价格j
30                         b[i][j]=true;
31                     else
32                         b[i][j]=false;
33             }//for2
34         }//for1
35
36         System.out.print(v+":"+b[x.length][v]);
37
38         if(b[x.length][v]){
39             System.out.print("  use: ");
40             for(int i=x.length,j=v;i>0 && j>0;){
41                 if(j>=x[i-1] && b[i-1][j-x[i-1]]){             //使用了第i个币种
42                     System.out.print(x[i-1]+" ");
43                     j=j-x[i-1];
44                     i--;
45                 }else{                                            //没有使用第i个币种
46                     i--;
47                 }
48             }//for
49         }
50         System.out.println();
51     }
52     //运行结果:
53         /*0:true  use:
54         1:true  use: 1
55         2:false
56         3:true  use: 3
57         4:true  use: 3 1
58         5:true  use: 5
59         6:true  use: 6
60         7:true  use: 6 1
61         8:true  use: 5 3
62         9:true  use: 6 3
63         10:true  use: 6 3 1
64         11:true  use: 6 5
65         12:true  use: 6 5 1
66         13:false
67         14:true  use: 6 5 3
68         15:true  use: 6 5 3 1
69         16:false
70         17:false
71         18:false
72         19:false
73         20:false*/
74 }

时间: 2024-08-30 13:50:59

Ex 6_18 硬币有限的兑换问题_第七次作业的相关文章

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

子问题定义:定义一个数组b,大小比兑换价格的大小多一个元素,其中b[i]表示是否能用面值为x1,x2,x3,..,xn的硬币兑换价格i. 递归关系: 初值设定:设b[0]=true 求解顺序:按下标从小到大依次求解b[i]的值,最后返回b[v]中的结果即为最终结果. 1 package org.xiu68.ch06.ex7; 2 3 public class Ex6_17 { 4 5 //数量无限的面值为x1,x2,x3,...,xn的硬币是否能兑换价格v 6 public static voi

Ex 6_23 一个生产系统共包含n个顺序执行的阶段..._第七次作业

Ex 6_16 旧货销售问题_第七次作业

即可 子问题定义:定义数组B(S,j),其中 B(S,j)表示在子集S中结束位置为j的子问题的最大收益值,其中j的前一个地点有两种情况,第一种情况是某个拍卖会 另一种情况是从家里出发. 递归关系: 初值设定:B({0},0)=0 求解顺序:按子集S的大小从小到大依次求解,最后找出最大的 即可.

ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 GIS的六大功能是数据获取.存储.查询.分析.表达.输出.在前面的内容里已经介绍了使用ArcGIS进行数据获取.存储.查询.表达和输出的过程,本章将介绍如何在ArcGIS中进行地理分析.分析是GIS的核心和灵魂,是GIS区别于一般的信息系统.CAD或者电子地图系统的主要标志之一. GIS分析,就是研究

深度学习与自然语言处理(4)_斯坦福cs224d 大作业测验1与解答

深度学习与自然语言处理(4)_斯坦福cs224d 大作业测验1与解答 作业内容翻译:@胡杨([email protected]) && @胥可([email protected]) 解答与编排:寒小阳 && 龙心尘 时间:2016年6月 出处: http://blog.csdn.net/han_xiaoyang/article/details/51760923 http://blog.csdn.net/longxinchen_ml/article/details/51765

02组_现代软件工程_第03次作业——对于自身评价(原有水平以及长远目标分析总结)

02组_现代软件工程_第03次作业 --对于自身评价(原有水平以及长远目标分析总结) 李聿轩 ---------------------------------------------------------------------------- 一.原有水平 1.技术水平 ①Java基础开发 A.基本语法逻辑的代码完成 B.利用基本内容完成控件功能的设计以及实现 C.多线程的管理控制,队列,栈的使用相对较少 ②Android开发 A.会使用原生的控件显示,利用诸如Activity,Servic

软件工程_东师站_第十周作业

一.PSP Data Type Job start Int End Total 20160510 助教 团队作业二 20:00 5 21:00 55 20160511 助教 团队作业二.三 18:45 16 20:45 104 20160512 耐撕 站立会议 18:15   18:35 20 二.进度条   代码行数 博客字数 知识点 第一周 400 430 见我博客软件工程——师大站1 第二周 0 5200 见我博客软件工程_东师站_课堂笔记 第三周 0 63 站立会议.单元测试 第四周 1

我的学习之路_第七章_list集合,set集合

[List集合] List集合存储数据的结构 堆栈:先进后出(先存进来的元素,最后取出) 例如:子弹压进弹夹 队列:先进先出(先存进来的元素,先取出来) 例如:排队 『ArrayList』 数组:查找元素快,增删元素慢 有索引 『LinkedList』 链表:查找元素慢,增删元素快 没有索引,连接的是节点 例如:手拉手 List接口方法_带索引的 add(int index ,E e) 在指定的索引上添加元素 remover(int index) 移除并返回指定索引上的元素 set(int in

软件工程_东师站_第八周作业

一.PSP Date Type Job Start Interrupt(min) End Total(min) 20160417 助教 黄金点 20:00 5 21:00 55 20160418 助教 黄金点 19:00 12 21:00 108 20160419 助教 黄金点 18:45 100 23:00 155 20160420 助教 团队作业 10:00 35 11:20 45 20160425 结对编程 四则运算 19:00 5 19:30 25 ? 二.进度条 ? 代码行数 博客字数