piggycase_java状态机设计

piggycase_java状态机设计一、实验目的练习使用动态规划算法解决实际问题(使用Java语言实现)二、实验内容【问题描述】给定一个空存钱罐的重量和这个存钱罐最多能装进去的重量,现在需要在不打破这个存钱罐的情况下猜测里面最少的钱。每种钱的数量不做限制,条件是必须装满,同时给出每种钱币的价值和重量。【输入】输入的第一行数据包含整数T,表示测试用例的数量。每个测试用例的第一行都包含两个整数e和f(1<=e<=f<=10000),分别表示空存钱罐和装满硬币的存钱罐的重量(以克记)。第二行包含一个整数n(1&

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

一、实验目的

练习使用动态规划算法解决实际问题(使用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();
    }

}

Jetbrains全家桶1年46,售后保障稳定

四、输出结果

在这里插入图片描述

欢迎前来关注
在这里插入图片描述

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234108.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月11日 下午2:43
下一篇 2025年6月11日 下午3:15


相关推荐

  • lnk2019无法解析的外部符号_declspec_error lnk1120无法解析的外部命令

    lnk2019无法解析的外部符号_declspec_error lnk1120无法解析的外部命令1.前言errorLNK2019:无法解析的外部符号这个错之前见过很多次,能知道最根本的原因在于链接过程中没有搜索到程序用到的库文件,即*.lib。笔记本重装了系统,有32Bit升到64Bit,运行VTK程序时,始终报错如下:1>  正在创建库E:\Driverprogram\imgport\Debug\imgport.lib和对象E:\Driverprog

    2022年10月6日
    3
  • 无人机——舵机篇(七)[通俗易懂]

    无人机——舵机篇(七)[通俗易懂]文章目录1.舵机的基本知识2.舵机的组成3.舵机的工作原理1.舵机的基本知识舵机就是一种有输出轴的小传动装置。这个输出轴能够通过向舵机输入一个编码信号而定位到我们指定的角度位置。只要这个编码信号存在于信号输入线上,舵机就将保持输出轴的当前角度位置不变。一旦编码信号改变,输出轴的角度位置也将跟着改变。实际中,舵机被用于控制无人机升降尾翼、方向尾翼等的位置。

    2022年6月11日
    289
  • wireshark抓包获取网站登录信息「建议收藏」

    教你使用wireshark抓包,获取网站的登录用户名与密码。

    2022年3月11日
    568
  • JAVA swing_java action

    JAVA swing_java action1.整体的结构图:2.编写GameFrame03.java的代码:packagecn.bjsxt.test;importjava.awt.Frame;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;publi…

    2025年6月22日
    8
  • 电子灌封胶是什么材料_灌封胶

    电子灌封胶是什么材料_灌封胶关注+星标公众号,不错过精彩内容来源|芯片之家一、什么是灌封?灌封(灌胶)就是将聚氨酯灌封胶、有机硅灌封胶、环氧树脂灌封胶用设备或手工方式灌入装有电子元件、线路的器件内,在常温或加热条…

    2022年10月2日
    8
  • git github gitlib gitlab分别是什么,有什么区别?

    git github gitlib gitlab分别是什么,有什么区别?git 是一种版本控制系统 是一个命令 是一种工具 类似于 SVNgitlib 是用于实现 git 功能的开发库 github 是一个基于 git 实现的在线代码仓库 包含一个网站界面 向互联网开放 gitlab 是一个基于 git 实现的在线代码仓库软件 你可以用 gitlab 自己搭建一个类似于 github 一样的系统 一般用于在企业 学校等内部网络搭建 git 私服 可以看作是一个简单的 github 参考

    2026年3月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号