一、实验目的

练习使用动态规划算法解决实际问题(使用Java语言实现)

二、实验内容

  1. 【问题描述】

给定一个空存钱罐的重量和这个存钱罐最多能装进去的重量,现在需要在不打破这个存钱罐的情况下猜测里面最少的钱。每种钱的数量不做限制,条件是必须装满,同时给出每种钱币的价值和重量。

  1. 【输入】

输入的第一行数据包含整数T,表示测试用例的数量。每个测试用例的第一行都包含两个整数e和f(1<=e<=f<=10000),分别表示空存钱罐和装满硬币的存钱罐的重量(以克记)。第二行包含一个整数n(1<=n<=500),表示硬币的总数量。接下来的n行每行都包含两个整数p和w,分别表示硬币的面值和重量。

  1. 【输出】

对每个测试用例,都输出一行,包含”存钱罐内的最小金额是 x“,其中x是存钱罐内的最小金额。若无法确定,则输出”这是不可能的“

  1. 【分析与思考】
    由题可知,这是一个完全背包问题。
    F-E可以看做背包的重量,硬币可以看做物品。
    如果用一维数组求解,则根据完全背包的讲解,在两层for循环中(硬币总重量的for循环 i 以及从前 j 种硬币选择的for循环 j )需要全部正序遍历。
    注意:dp[0]需要初始化为0,因为可能存在这样的情况:硬币总重量为1,有一种重量为1,面值为2的硬币。
    那么,此时dp[j]=Math.min(dp[j],dp[j-coins[i].weight]+coins[i].value);求解出来为2。

三、程序代码

package PiggyBank;import java.util.Scanner;public class Piggybank {private int n;//测试的次数private int m;//硬币的种类private int e;//存钱罐自身重量private int f;//存钱罐装满最大的重量private int v;//存钱罐的容量private int[] dp=new int[10001];//dp数组private int y=0;//标记private int[] result;//存贮结果Coin[] coins;//硬币的面值和重量数组public void inputData() {Scanner scanner = new Scanner(System.in);System.out.println("请输入测试的次数:");n = scanner.nextInt();result =new int[n];coins =new Coin[1000];for(int x =0;x<n;x++){System.out.println("请输入存钱罐自身重量和装满最大的重量:");e = scanner.nextInt();f = scanner.nextInt();v= f-e;System.out.println("请输入硬币的种类:");m = scanner.nextInt();System.out.println("请输入每种硬币的面值和重量:");for (int i = 0; i <m; i++) {coins[i] =new Coin();coins[i].value = scanner.nextInt();coins[i].weight = scanner.nextInt();}load();}display();}public void load(){dp[0]=0;for(int i=1;i<=v;i++){dp[i]=500000001;}for(int i=0;i<m;i++){for(int j=coins[i].weight;j<=v;j++){dp[j]=Math.min(dp[j],dp[j-coins[i].weight]+coins[i].value);//状态转移方程}}result[y]=dp[v];y++;}public void display(){System.out.println("结果如下");for (int i=0;i<n;i++){if(result[i]!=500000001){System.out.println("存钱罐内的最小金额是"+result[i]);}else {System.out.println("这是不可能的");}}}public static void main(String[] args) {Piggybank piggybank =new Piggybank();piggybank.inputData();}}

四、输出结果

欢迎前来关注

java实现动态规划算法解决存钱罐问题(piggy bank)相关推荐

  1. Java使用动态规划算法思想解决01背包问题

    Java使用动态规划算法思想解决背包问题 背包问题是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高 动 ...

  2. java数据结构-动态规划算法-一次性学会

    java数据结构-动态规划算法 算法介绍 最佳实践-背包问题 代码实践 寻找最长回文子串的求解 总结 算法介绍 动态规划算法的核心思想是:将大问题划分为小问题,一步步获取最优解 与分治算法类似,但也有 ...

  3. 动态规划算法解决背包问题

    一.动态规划算法概述 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从子问题解得到原问题解. 但是经分解得到的子问题往往不是互相独立的.不同子问题的数目常常 ...

  4. java开发模拟退火算法解决函数最值!

    在众多搜索算法之中,模拟退火是一种搜索性的算法,但是它的缺点在于收敛性比较弱. 这里主要运用模拟退火算法解决函数y=xsin(10xpi)+2的最优值问题. 代码及算法原理如下: /********* ...

  5. 用动态规划算法解决TSP问题

    旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路 ...

  6. 【算法分析与设计】实验 动态规划算法解决找零钱问题

    问题描述 设有 n n n种不同面值的硬币,各硬币的面值存于数组 T [ 1 : n ] T[1:n] T[1

  7. 贪心算法,递归算法,动态规划算法比较与总结

    一般实际生活中我们遇到的算法分为四类: 一>判定性问题        二>最优化问题        三>构造性问题        四>计算性问题 而今天所要总结的算法就是着重解 ...

  8. java 动态规划视频_157-动态规划算法解决背包问题1

    2.网上数据结构和算法的课程不少,但存在两个问题: 1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了 2) ...

  9. 动态规划算法入门---java版

    转载:http://blog.csdn.net/p10010/article/details/50196211 动态规划算法(后附常见动态规划为题及Java代码实现) 一.基本概念 动态规划过程是:每 ...

最新文章

  1. java io工作机制_深入分析Java I/O 工作机制
  2. 支付宝扫一下就能体验的深度学习模型
  3. 教你如何在面试中用「10分钟快速分析」一款产品
  4. oracle恢复某个表的数据库,如何从rman的全备份中恢复一张表?
  5. 述说互联网1.0时代的巨头Yahoo的25年消亡史,传奇巨头落幕的故事
  6. mysql的length函数和char_length中文字符长度计算函数
  7. MM(Majorize-Minimization, Minorize-Maximization)优化方法
  8. mysql5.7 新增参数_MySQL 5.7 新增参数
  9. 3. 视图数据View Data和Balde模版 - Laravel从零开始教程
  10. 第12秒做视频封面:阿里云视频截帧功能
  11. 贪心——今年暑假不AC(hdu2037)
  12. honeywell Xenon 1900 usb
  13. Tomcat——通过.bat批处理程序重启Tomcat
  14. 汉字 计算机 坟墓,让汉字跨越数字化鸿沟
  15. 假设有一张纸可对折无限次,它的厚度为0.1毫米,珠穆朗玛峰的高度为8848.86米,求这张纸对折多少次后它的厚度会超过珠峰的高度。
  16. android 调出键盘表情_Android高仿微信表情输入与键盘输入详解
  17. vue使用video和vue-video-player并且可实现视频铺满呦
  18. 架构师之路(3)---架构师的职责
  19. 【git】Git版本控制
  20. 蓝牙款血氧仪单片机开发

热门文章

  1. 为了更好的实践与应用-机器人与ROS教学与培训
  2. 职场上,不知道这些,活该工资比人低一倍
  3. MTK平台创建Vendor方法-v1.4
  4. iOS App启动页面
  5. 算法分析与设计(VC问题团问题独立集问题)
  6. 关于openGL, openGL ES, openVG及android中2D调用关系的报告
  7. 省级刊物发表论文期限是多久
  8. 紫书已经基本学完现在开启紫书题目补完计划!!!
  9. 电脑回收站清空了怎么恢复回来
  10. 新浪微博粉丝通推广效果分析