DP硬币组合问题
时间:2019-09-15
本文章向大家介绍DP硬币组合问题,主要包括DP硬币组合问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题描述:有5种面值分别为1,5,10,25,50面值的硬币,现输入非负整数s,要求选用硬币,使得选用的硬币最少,且刚好能组合成价值为s的数量。
解:此题采用动态规划来做,如果输入的硬币数量少于5,我们只能采用面值为1的数量。如果s为6,则有两种方案。方案1:全部采用面值为1的硬币数。方案2:
采用一个硬币为1的,一个硬币为5的,此时硬币数量刚好为2。我们把这5种面值存放到一个数组中,记录为type。dp[i]表示的意思是s等于i时,所用的最少硬币的数量。
第一步:先初始化dp;使每一个dp[i]都为整数中最大的值即为inf;
递推式:dp[i]=min(dp[i],dp[i-type[y]+1]),y表示面值中的下标。
for(int j=0;j<5;j++)
for(int i=type[j];i<money;i++)
dp[i]=min(dp[i],dp[i-type[j]]+1)
注意:i是是从type[j]开始的,表示money小于type[j]的不用再考虑。
1 import java.util.Scanner; 2 3 public class 最少硬币问题 4 { 5 static int Money=251; 6 static int value=5; 7 static int[] type={1,5,10,25,50}; 8 static int[] Min=new int[Money]; 9 static int inf=Integer.MAX_VALUE; 10 static void solve() 11 { 12 for(int k=0;k<Money;k++) 13 Min[k]=inf; 14 Min[0]=0; 15 for(int j=0;j<value;j++) 16 for(int i=type[j];i<Money;i++) 17 Min[i]=Math.min(Min[i], Min[i-type[j]]+1); 18 } 19 public static void main(String[] args) 20 { 21 // TODO 自动生成的方法存根 22 Scanner sc=new Scanner(System.in); 23 int s=sc.nextInt(); 24 solve(); 25 System.out.println(Min[s]); 26 } 27 28 }
1 import java.util.Scanner; 2 3 public class 最少硬币问题 4 { 5 static int Money=251; 6 static int value=5; 7 static int[] type={1,5,10,25,50}; 8 static int[] Min=new int[Money]; 9 static int inf=Integer.MAX_VALUE; 10 static void solve() 11 { 12 for(int k=0;k<Money;k++) 13 Min[k]=inf; 14 Min[0]=0; 15 for(int j=0;j<value;j++) 16 for(int i=type[j];i<Money;i++) 17 Min[i]=Math.min(Min[i], Min[i-type[j]]+1); 18 } 19 public static void main(String[] args) 20 { 21 // TODO 自动生成的方法存根 22 Scanner sc=new Scanner(System.in); 23 int s=sc.nextInt(); 24 solve(); 25 System.out.println(Min[s]); 26 } 27 28 }
原文地址:https://www.cnblogs.com/ybc7/p/11524071.html
- 用OpenCV计算道路交通流量的一个直观教程
- WPF Button TextBox 圆角
- 设置WPF窗体全屏显示:
- winform 、WPF传值方式详解
- 你一定要知道!数据科学家提高工作效率的基本工具
- MySQL 大数据操作注意事项
- Winform窗口里的嵌入WPF的UserControl,关闭Winform父窗体的方法
- LINQ分页和排序,skip和Take 用法
- 这或许是对小白最友好的python入门了吧——21,导入模块
- opoa介绍
- 数据库记录安全解决方案
- 基于计算机视觉和OpenCV:创建一个能够计算道路交通流量的应用
- 这或许是对小白最友好的python入门了吧——20,定义函数简单应用
- 数据库结构版本控制
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”
- 「零门槛多语言 Python/C/C# 通用思想学习系列」第一篇:经典HelloWorld
- 直播系统定制,判断数据连接是否可用
- VS Code 编辑器入门指南上篇-核心概念与组件
- Python turtle库实现基本剖析
- python thinker canvas create_arc 使用详解
- Python3 实现单例设计模式
- Python3 实现建造者模式
- python 实现原型设计模式
- python 最简单的实现适配器设计模式
- python3 最基本且简单的实现组合设计模式
- python 实现装饰器设计模式
- 看得懂的外观设计模式 python3 实现
- 看得懂的设计模式 享元模式python3 最基本(简单)实现
- python3 最简单的实现 模版设计模式