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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • wolive在线客服系统_源码屋

    wolive在线客服系统_源码屋wolive是一款为数不多的可自行搭建的php客服系统源码,基于开源高性能workerman框架开发,看了下,功能比较全。想到基于workerman开发,并发性能应该不错。找遍其它客服系统,发现都没有给源码,程序及聊天数据也全部存储在别人服务器上,由于业务涉及到一些账号、订单、买家信息等隐私,担心数据安全问题,所以找到了wolive。由于wolive可以私有化部署,数据库、程序都在自己服务器上,…

    2022年9月21日
  • oracle数据库查询语句大全_oracle查询是否存在记录

    oracle数据库查询语句大全_oracle查询是否存在记录1oracle数据库查询表的所有数据–select*from表名;(*代表所有)2oracle数据库查询表中指定字段的值–select字段名1,字段名2,……from表名;3oracle数据库往表中添加数据信息–(添加信息使用insertinto语句)insertinto表名values(添加相对应的数据信息,如果在一个字段名中没有信息可以用“null”nul…

    2022年9月8日
  • WPF是什么_wpf documentviewer

    WPF是什么_wpf documentviewer项目中要用到一个数据分页栏,虽然自己没有实现过,但凭经验感觉它和ListBox/ListView有关。于是去网上搜了下WPF数据分页栏,果然很多实现都用到了ListView。于是拣了一种比较简单的实现学习,其中包含下面代码:ListView.View的标签内出现了GridView。在我印象中Grid是网格式的,而List是列表式的,所以我很好奇两者为什么可以混到一起。当然从类的关系上来看,应该是两者都继承了一个共同的父类。那么为了能使用起来更“自如”,对GridView有个系统的了解,还是有必要学习一

    2022年9月2日
  • 2021CSGO_csgo靠谱交易平台

    2021CSGO_csgo靠谱交易平台2021csgo国内靠谱正规的开箱网站大全官网直达链接优惠码/推广码网站状态incsgocsgogo直接取回skinsdogcsgogo直接取回88skinscsgo直接取回skskinscsgogo直接取回npskinscsgogo直接取回fateskinscsgo直接取回yskins暂无可取回coolkaixiangcsgo直接取回piggycasecsgogo可取回box818csgo

    2022年10月5日
  • tcp和udp的区别和使用场景_TCP跟UDP有什么不同

    tcp和udp的区别和使用场景_TCP跟UDP有什么不同TCPTCP是一种面向有连接的传输层协议,能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。UDPUDP是一种面向无连接的传输层协议,不会对自己提供的连接实施控制。适用于实时应用,例如:IP电话、视频会议、直播等。…

    2022年9月20日
  • 静态方法只能通过类名进行调用_java非静态方法可以调用静态方法吗

    静态方法只能通过类名进行调用_java非静态方法可以调用静态方法吗静态方法调用的三种方式:1、newxx().静态();//使用对象调用,不推荐2、xx.静态();//类名调用,正规调用方法,推荐3、静态();//本类的静态方法在本类调用,直接调用欢迎各位在评论区留言探讨…

    2022年10月28日

发表回复

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

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