java动态规划取硬币问题
最近一直在研究动态规划的问题。今天遇到了取硬币问题。
其实动态规划还是,我从底部向顶部,依次求出每个状态的最小值,然后就可以标记上。
这道题目就是,假如有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动态规划取硬币问题的更多相关文章
- java动态规划导弹问题
这是一道动态规划题,和昨天的取硬币还有最长公共字串有点类似. 1.题目描述: 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一 ...
- java 抓取网页图片
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.Out ...
- Java中取小数点后两位(四种方法)
摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法) 一 Long是长整型,怎么有小数,是double吧 java.text.D ...
- java大数取余
java大数取余: 类方法:BigInteger.divideAndRemainder() 返回一个数组,key = 0为商key = 1为余数 import java.util.*; import ...
- Java Byte取值范围
Java Byte 的取值范围大家都知道(-128 ~ 127),那么-128 和 127 这两个数是怎么计算的呢? #大学知识回顾: 概念:负数的补码是该 数 绝 对 值 的 原 码 按 位 取 反 ...
- MinerHtmlThread.java 爬取页面线程
MinerHtmlThread.java 爬取页面线程 package com.iteye.injavawetrust.miner; import org.apache.commons.logging ...
- MinerConfig.java 爬取配置类
MinerConfig.java 爬取配置类 package com.iteye.injavawetrust.miner; import java.util.List; /** * 爬取配置类 * @ ...
- Java爬取网络博客文章
前言 近期本人在某云上购买了个人域名,本想着以后购买与服务器搭建自己的个人网站,由于需要筹备的太多,暂时先搁置了,想着先借用GitHub Pages搭建一个静态的站,搭建的过程其实也曲折,主要是域名地 ...
- Java爬取校内论坛新帖
Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...
随机推荐
- ballerina 学习十 streams
ballerina 的streams 使用的是siddhi complex event processing 引擎处理,可以包含的语法有 projection filtering windows jo ...
- lapis 集成openresty最新版本cjson 问题的解决
备注: 为了解决安装了lapis.同时又希望使用新版nginx 以及openresty 的特性(stream ...) 1. 解决方法 参考: https://github.com/leaf ...
- Spring RESTful之@ModelAttribute
@ModelAttribute有俩个位置,一个是在方法体中,下面这个demo的用意就是每次controller@RequestMapping方法被调用之前都会走这个方法,并向Model中(@Reque ...
- Java API 操作 Mongodb
本次测试环境使用一台ip为 192.168.2.23 的虚拟机 一.依赖 <dependency> <groupId>org.mongodb</groupId> & ...
- docker怎么破?
为什么要装docker? 因为linux服务器不好用,很多操作不好进行,比如安装包没有管理员权限 docker可以访问本地显卡,比一般的virtual box 或者VMware都要好 怎么装docke ...
- c++ 异常处理(3)
<C++编码规范与指导>一文,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了.没想到时隔几年以后才有机会把这个尾巴补完 :-). 还是那句开场白:“在恰当的场合使用恰当的特性” ...
- erlang的调试配置
distel可以断点调试erlang,但是步骤非常繁琐 以下面的测试脚本为例说明 geometry.erl -module(geometry). -export([area/1]). area({re ...
- windows下编译nginx+nginx_rtmp_modue(vs2013)
阅读官方编译windows版本的方法 http://nginx.org/en/docs/howto_build_on_win32.html 我的环境 Windows 7 Ultimate 64,Vis ...
- Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能
nginx-rtmp-mudule RTMP 是一款优秀的Car-eye-http-flv-module 是在nginx-rtmp-mudule RTMP基础上修改的流媒体服务器,除了支持flash播 ...
- java代码=====实现修改while()
总结: package com.mmm; public class cse { public static void main(String[] args) { // int count=0;你妹,我 ...