1092: 最大價值(dollars) 演算法 動態規劃

來源:互聯網
上載者:User

標籤:create   cin   ble   scan   package   演算法   自然數   out   rgs   

題目地址: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的誤差範圍內將被認為是正確的。

範例輸入
31001502005400300500300250
範例輸出
200.00 //用力錯誤,正常輸出應該是100266.66
提示

 

範例2說明:

第一天:100美元換成400德國馬克

第二天:400德國馬克換成133.3333美元

第三天:133.3333美元換成666.6666德國馬克

第四天:不換

第五天:666.6666德國馬克換成266.6666美元

 

 

解題思路:

使用動態規劃記錄每一天的曆史的最大價值,然後最後根據曆史價值求解!

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 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 = {400, 300, 500, 300, 250};//        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;    }}

  

 

 

 

1092: 最大價值(dollars) 演算法 動態規劃

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.