[NOI2007]貨幣兌換Cash

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 6353  Solved: 2563
[Submit][Status][Discuss]

Description

小Y最近在一家金券交易所工做。該金券交易所只發行交易兩種金券:A記念券(如下簡稱A券)和 B記念券(如下
簡稱B券)。每一個持有金券的顧客都有一個本身的賬戶。金券的數目能夠是一個實數。天天隨着市場的起伏波動,
兩種金券都有本身當時的價值,即每一單位金券當天能夠兌換的人民幣數目。咱們記錄第 K 天中 A券 和 B券 的
價值分別爲 AK 和 BK(元/單位金券)。爲了方便顧客,金券交易所提供了一種很是方便的交易方式:比例交易法
。比例交易法分爲兩個方面:(a)賣出金券:顧客提供一個 [0,100] 內的實數 OP 做爲賣出比例,其意義爲:將
 OP% 的 A券和 OP% 的 B券 以當時的價值兌換爲人民幣;(b)買入金券:顧客支付 IP 元人民幣,交易所將會兌
換給用戶總價值爲 IP 的金券,而且,知足提供給顧客的A券和B券的比例在第 K 天剛好爲 RateK;例如,假定接
下來 3 天內的 Ak、Bk、RateK 的變化分別爲:
假定在第一天時,用戶手中有 100元 人民幣可是沒有任何金券。用戶能夠執行如下的操做:
注意到,同一天內能夠進行屢次操做。小Y是一個頗有經濟頭腦的員工,經過較長時間的運做和行情測算,他已經
知道了將來N天內的A券和B券的價值以及Rate。他還但願可以計算出來,若是開始時擁有S元錢,那麼N天后最多能
夠得到多少元錢。

 

Input

輸入第一行兩個正整數N、S,分別表示小Y能預知的天數以及初始時擁有的錢數。接下來N行,第K行三個實數AK、B
K、RateK,意義如題目中所述。對於100%的測試數據,知足:0<AK≤10;0<BK≤10;0<RateK≤100;MaxProfit≤1
0^9。
【提示】
1.輸入文件可能很大,請採用快速的讀入方式。
2.必然存在一種最優的買賣方案知足:
每次買進操做使用完全部的人民幣;
每次賣出操做賣出全部的金券。
 

Output

只有一個實數MaxProfit,表示第N天的操做結束時可以得到的最大的金錢數目。答案保留3位小數。php

Sample Input

3 100
1 1 1
1 2 2
2 2 3

Sample Output

225.000

HINT

 

 
記念Amazing counter崩掉100天,換了cutecounter
玄學的是背景的Miku也崩掉了,從新上傳了一張
 
CDQ分治(TLE 60分)
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 using namespace std;
 5 
 6 const int MAXN=100005;
 7 int n,s;
 8 double A[MAXN],B[MAXN],R[MAXN];
 9 double F[MAXN],ans;
10 
11 int main()
12 {
13     scanf("%d%d",&n,&s);
14     for(int i=1;i<=n;i++)
15         scanf("%lf%lf%lf",&A[i],&B[i],&R[i]);
16     ans=s;
17     F[1]=s*R[1]/(A[1]*R[1]+B[1]);
18     for(int i=2;i<=n;i++)
19     {
20         for(int j=1;j<i;j++)
21             ans=max(ans,F[j]*A[i]+F[j]/R[j]*B[i]);
22         F[i]=ans*R[i]/(A[i]*R[i]+B[i]);
23     }
24     printf("%.3lf",ans);
25     return 0;
26 }
相關文章
相關標籤/搜索