zoukankan      html  css  js  c++  java
  • 1092: 最大价值(dollars) 算法 动态规划

    题目地址:http://www.hustoj.com/oj/problem.php?id=1092

    题目描述

    Dave以某种方法获取了未来几天美元对德国马克的兑换率。现在Dave只有100美元,请编程序,使Dave通过几天的美元与德国马克的兑换后能得到最多的美元。

    输入

    第1行包含一个自然数n(l≤n≤I00),表示Dave所知道的兑换率的天数。
    后面跟着n个自然数A (100≤A≤I000)。第i+l行的数A表示第i天的兑换率。它告诉那天他能用100美元购买A马克,或用A马克购买100美元。

    输出

    只有1行,输出Dave经过n天的兑换后能得到的最多的美元值。结果保留两位小数。注意不一定每天都需要兑换。
    说明:由于实数运算存在误差,结果在0.05的误差范围内将被认为是正确的。

    样例输入

    3
    100
    150
    200
    5
    400
    300
    500
    300
    250
    

    样例输出

    200.00 //用力错误,正常输出应该是100
    266.66
    

    提示

    样例2说明:

    第一天:100美元换成400德国马克

    第二天:400德国马克换成133.3333美元

    第三天:133.3333美元换成666.6666德国马克

    第四天:不换

    第五天:666.6666德国马克换成266.6666美元

    解题思路:

    使用动态规划记录每一天的历史的最大价值,然后最后根据历史价值求解!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    package com.daxin;
    import java.util.Arrays;
    import java.util.Scanner;
    /**
     * Created by Daxin on 2017/8/20.
     * 动态规划
     */
    public class MaxDollarValue {
        public static void main(String[] args) {
    //        Scanner cin = new Scanner(System.in);
    //        int n = cin.nextInt();
    //
    //        int[] nums = new int[n];
    //
    //        for (int i = 0; i < n; i++) {
    //            nums[i] = cin.nextInt();
    //        }
            int[] nums = {400300500300250};
    //        int[] nums2 = {100, 150, 200};
    //        System.out.println(getMaxValue(nums1));
            System.out.println(getMaxValue(nums));
        }
        public static double getMaxValue(int[] nums) {
            int len = nums.length;
            double[][] table = new double[len][len + 1];//
            table[0][1] = 1;
            for (int i = 0; i < table.length; i++) {
                table[i][0] = nums[i];
            }
            for (int i = 2; i < table[0].length; i++) {
                for (int j = 1; j < table.length; j++) {
                    double noChange = table[j - 1][i - 1];
                    double change = noChange * nums[j - 1] * 1.0 / nums[j];
                    table[j][i] = noChange > change ? noChange : change;
                }
            }
            for(double []ds :table){
                System.out.println(Arrays.toString(ds));
            }
            return Math.floor(table[table.length - 1][table[0].length - 1] * 10000) / 100;
        }
    }

      

  • 相关阅读:
    苹果一体机发射Wi-Fi
    iphone 屏蔽系统自动更新,消除设置上的小红点
    data parameter is nil 异常处理
    copy与mutableCopy的区别总结
    java axis2 webservice
    mysql 远程 ip访问
    mysql 存储过程小问题
    mysql游标错误
    is not writable or has an invalid setter method错误的解决
    Struts2中关于"There is no Action mapped for namespace / and action name"的总结
  • 原文地址:https://www.cnblogs.com/wangsicongde/p/7576887.html
Copyright © 2011-2022 走看看