最近一直在研究动态规划的问题。今天遇到了取硬币问题。

其实动态规划还是,我从底部向顶部,依次求出每个状态的最小值,然后就可以标记上。

这道题目就是,假如有1,5,7,10这四种币值的硬币,我取14元,取的硬币数最少要多少张。

其实动态规划就是要求出状态转移方程,就好比我的上一个博客的求最短路径的问题。而这道取硬币问题呢。如果我的硬币大于有的币值,那么就能状态转移

转移为temp[i-weizhi[j] + 1。temp[]是用来存放每种币值的最小数目。weizhi[]是用来存放币值。比如说吧,temp[0]表示取0个币值要0次,temp[1] 中1只大于1,所以能取1枚硬币。那么转换成temp[1-1]+1,取1次

temp[2]呢,2也是只大于1,那么转化成temp[2-1]+1......到temp[5]就不一样了,temp[5]中的5大于1,所以可以取temp[5-1]+1 = 5 ,而也可以取temp[5-5]+1 = temp[0]+1 = 0+1 = 1。照这种思想完全可以编出代码来了。但是这里涉及到一个问题,我每次都需要比较我最小的一个,这时候直接用变量来存放就行了,千万别习惯性的想用数组,我开始就是想用数组,但是还越界了,下面是我的代码,其实那个for循环就是动态规划的核心。可以理解为填数字吧。今天这么晚了,明天给大家更新填数字的代码。

import java.util.Scanner;

public class 找零钱 {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.println("请输入想计算多少枚硬币:");
int n = scn.nextInt();
int temp[] = new int[n+1]; //存放每种硬币取的最少的取法
int weizhi[] = {1,5,7,10}; //四种硬币 //动态规划的核心,用for循环去填充每次能标记上的
for(int i=1;i<temp.length;i++) { //取的硬币的数量
int minV = i; //初始化最小的为minV,因为最小取的硬币数量肯定不会比i还要大
for(int j=0;j<weizhi.length;j++) {
if(i>=weizhi[j]) { //取的硬币的数目比有的数目要大。
int k = temp[i-weizhi[j]] + 1; //状态转移方程,前面介绍的。
if(k<minV) {
minV = k; //保存了,这一趟比较的最小的取的硬币值
}
}
}
temp[i] = minV;
}
System.out.println("至少需要" + temp[n] + "枚硬币");
}
}

java动态规划取硬币问题的更多相关文章

  1. java动态规划导弹问题

    这是一道动态规划题,和昨天的取硬币还有最长公共字串有点类似. 1.题目描述:                        某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一 ...

  2. java 抓取网页图片

    import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.Out ...

  3. Java中取小数点后两位(四种方法)

    摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法)   一 Long是长整型,怎么有小数,是double吧     java.text.D ...

  4. java大数取余

    java大数取余: 类方法:BigInteger.divideAndRemainder() 返回一个数组,key = 0为商key = 1为余数 import java.util.*; import ...

  5. Java Byte取值范围

    Java Byte 的取值范围大家都知道(-128 ~ 127),那么-128 和 127 这两个数是怎么计算的呢? #大学知识回顾: 概念:负数的补码是该 数 绝 对 值 的 原 码 按 位 取 反 ...

  6. MinerHtmlThread.java 爬取页面线程

    MinerHtmlThread.java 爬取页面线程 package com.iteye.injavawetrust.miner; import org.apache.commons.logging ...

  7. MinerConfig.java 爬取配置类

    MinerConfig.java 爬取配置类 package com.iteye.injavawetrust.miner; import java.util.List; /** * 爬取配置类 * @ ...

  8. Java爬取网络博客文章

    前言 近期本人在某云上购买了个人域名,本想着以后购买与服务器搭建自己的个人网站,由于需要筹备的太多,暂时先搁置了,想着先借用GitHub Pages搭建一个静态的站,搭建的过程其实也曲折,主要是域名地 ...

  9. Java爬取校内论坛新帖

    Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...

随机推荐

  1. ballerina 学习十 streams

    ballerina 的streams 使用的是siddhi complex event processing 引擎处理,可以包含的语法有 projection filtering windows jo ...

  2. lapis 集成openresty最新版本cjson 问题的解决

    备注:    为了解决安装了lapis.同时又希望使用新版nginx 以及openresty 的特性(stream ...)   1. 解决方法 参考: https://github.com/leaf ...

  3. Spring RESTful之@ModelAttribute

    @ModelAttribute有俩个位置,一个是在方法体中,下面这个demo的用意就是每次controller@RequestMapping方法被调用之前都会走这个方法,并向Model中(@Reque ...

  4. Java API 操作 Mongodb

    本次测试环境使用一台ip为 192.168.2.23 的虚拟机 一.依赖 <dependency> <groupId>org.mongodb</groupId> & ...

  5. docker怎么破?

    为什么要装docker? 因为linux服务器不好用,很多操作不好进行,比如安装包没有管理员权限 docker可以访问本地显卡,比一般的virtual box 或者VMware都要好 怎么装docke ...

  6. c++ 异常处理(3)

    <C++编码规范与指导>一文,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了.没想到时隔几年以后才有机会把这个尾巴补完 :-). 还是那句开场白:“在恰当的场合使用恰当的特性” ...

  7. erlang的调试配置

    distel可以断点调试erlang,但是步骤非常繁琐 以下面的测试脚本为例说明 geometry.erl -module(geometry). -export([area/1]). area({re ...

  8. windows下编译nginx+nginx_rtmp_modue(vs2013)

    阅读官方编译windows版本的方法 http://nginx.org/en/docs/howto_build_on_win32.html 我的环境 Windows 7 Ultimate 64,Vis ...

  9. Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能

    nginx-rtmp-mudule RTMP 是一款优秀的Car-eye-http-flv-module 是在nginx-rtmp-mudule RTMP基础上修改的流媒体服务器,除了支持flash播 ...

  10. java代码=====实现修改while()

    总结: package com.mmm; public class cse { public static void main(String[] args) { // int count=0;你妹,我 ...