挖金矿与动态规划(续)

上节提到了一个关于买书的练习,原文只是简单描述了下思路,然后我用java代码实现并做了少量优化。由于并未找到相关的运行实例,所以如有任何错误感谢指出。
原文如下:

题目一:买书

   有一书店引进了一套书,共有3卷,每卷书定价是60元,书店为了搞促销,推出一个活动,活动如下:


   如果单独购买其中一卷,那么可以打9.5折。

   如果同时购买两卷不同的,那么可以打9折。

   如果同时购买三卷不同的,那么可以打8.5折。



   如果小明希望购买第1卷x本,第2卷y本,第3卷z本,那么至少需要多少钱呢?(x、y、z为三个已知整数)。



   当然,这道题完全可以不用动态规划来解,但是现在我们是要学习动态规划,因此请想想如何用动态规划来做?

代码如下:

import java.util.Scanner;

public class dp_algo {
    static double[][][] moneys=null;

    public static void main(String[] args) {
        System.out.println("input:");
        Scanner sc=new Scanner(System.in);
        int x=sc.nextInt();
        int y=sc.nextInt();
        int z=sc.nextInt();
        moneys=new double[x+1][y+1][z+1];
        System.out.println(GetMinMoney(x,y,z));
    }

    private static double min(double ...args){
        double mNum=args[0];
        for(int i=1;i<args.length;i++){
            if(mNum>args[i]){
                mNum=args[i];
            }
        }
        return mNum;
    }


    private static double GetMinMoney(int x, int y, int z) {
        double m=0;
        double s1=0,s2=0,s3=0;
        if(moneys[x][y][z]>0)
            return moneys[x][y][z];
        //试验中数据的对称性,及xyz=(001)或(100)效果一样,所以这里我们规定x>=y>=z
        if(x==0){//此时y=z=0
            m=0;
        }else if(z>0){//此时x>=1,y>=1,z>=1
            s1=60*0.95+GetMinMoney(x,y,z-1);//取一本
            s2=120*0.9+GetMinMoney(x,y-1,z-1);//取两本
            s3=180*0.85+GetMinMoney(x-1,y-1,z-1);//取三本,下同
            m=min(s1,s2,s3);
        }else if(y>0){//此时x>=1,y>=1,z==0
            s1=60*0.95+GetMinMoney(x,y-1,z);
            s2=120*0.9+GetMinMoney(x-1,y-1,z);
            m=min(s1,s2);
        }else if(x>0){//此时x>=1,y=z=0
            //m=60*0.95+GetMinMoney(x-1,y,z);
            return m=60*0.95*x;
        }
        moneys[x][y][z]=m;
        return m;
    }
}

输入与输出:

input:
4 3 2//输入
471.0//输出
金矿html源代码,首先需要了解HTML是什么。HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言,它使用标签和元素来描述和组织网页的结构和内容。 金矿html源代码的过程主要分为三个步骤:分析、提取和利用。 首先,在分析阶段,需要打开目标网页,并通过查看网页源代码来获取到HTML源代码。可以按下键盘上的Ctrl+U组合键,在浏览器中打开网页源代码,也可以在浏览器中使用开发者工具(一般是F12键)来查看源代码。复制源代码并保存。 接下来,在提取阶段,需要从HTML源代码中提取出有价值的信息。可以使用文本编辑器(如记事本)或专业的HTML编辑器(如Visual Studio Code)打开保存的源代码文件。通过观察和分析代码结构,识别出需要的数据,如网页标题、文本内容、链接地址等,并提取出来。 最后,在利用阶段,可以根据提取的信息进行进一步的操作。根据需求,可以在提取的文本内容中进行搜索或分析,找到目标关键词、统计词频等。或者根据提取的链接地址进行访问,爬取更多的网页信息。 需要注意的是,在进行这个过程时,应该遵守相关法律和道德规范,不应该非法获取或滥用他人的网页数据。 总之,金矿html源代码是一个技术活,需要有一定的HTML语言基础和相关工具的运用能力。希望我的回答能够帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值