一、問題描述
套匯是指利用貨幣匯兌率的差異將乙個單位的某種貨幣轉換為大於乙個單位的同種貨幣。例如,假定1 美元可以買0.7 英鎊,1 英鎊可以買9.5 法郎,且1 法郎可以買到0.16美元。通過貨幣兌換,乙個商人可以從1 美元開始**,得到0.7×9.5×0.16=1.064美元,從而獲得6.4%的利潤。 給定n 種貨幣c1 ,c2 ,... ,cn的有關兌換率,試設計乙個有效演算法,用以確定是否存在套匯的可能性。
輸入含多個測試資料項。每個測試資料項的第一行中只有1 個整數n (1< =n< =30),表示貨幣總數。其後n行給出n種貨幣的名稱。接下來的一行中 有1 個整數m,表示有m種不同的貨幣兌換率。其後m行給出m種不同的貨幣兌換率,每行有3 個資料項ci , rij 和cj ,表示貨幣ci 和cj的兌換率為 rij。檔案最後以數字0 結束。
輸出對每個測試資料項j,如果存在套匯的可能性則輸出「case j yes」, 否則輸出「case j no」。
二、問題分析
(1)區域性問題解決不了,因為當你一直選取匯率大的或者匯率小的轉都不一定能轉成最優。因此,這是涉及列舉所有情況的問題。即每次選擇會和之前選擇的情況相關,因此不能以一種固定的策略進行。
(2)考慮通項,從目標值而言,很明顯是第i種貨幣轉換成第j種貨幣的最優情況。
考慮轉換方程,dp[i][j] = max(dp[i][k]*dp[k][j] , dp[i][j]);
即,flord模型,一直往路徑i-j塞入點,使得i-j路徑長度大於1,即可實現套匯。為什麼會有這種想法?因為對於i-j 你可能經過i- i1 - i2 -j也可能i-i1-j對於通項不可能定義是dp[i][i1]...[j]將所有可能的中間點都放在通項中。
三、問題解決
bool floyd(intn) }
}for(int i=0;i)
return
false;}
動態規劃之輪船租用問題(思考分析 解決 演算法模板)
一 問題描述 長江遊艇俱樂部在長江上設定了n個遊艇出租站1,2,3 n。遊客可以在這些遊艇出租站用遊艇,並在下游的任何乙個遊艇出租站歸還遊艇。遊艇出租站i到遊艇出租站j之間的租金為r i,j 1 i試設計乙個演算法,計算從遊艇出租站1到出租站n所需的最少租金。第一行表示有n個站點。接下來n 1行是r...
動態規劃 思考解決動態規劃問題
關於動態規劃,過了一段時間,自己給自己做乙個小結.給你一道題目 題目題意 乙個n n的方格.從 1,1 進去,從 n,n 出 每乙個交叉點都有花生,每次只能是向下或者向右走。讓你找出走過路線中能踩到的花生的數量最多是多少?給出的資料分析 驗證正確 思考 傳統思考方式 要思考這個幾個東西,但自己總覺得...
動態規劃解決的問題思路分析
一般三類問題需要動態規劃來處理 1 最大最小值 2 計數型,比如從a b有多少種走法?但是不會把每週走法都羅列出來,很多時候我們會把羅列的個數的的題也當成動態規劃,其實不是。3 存在型,比如是否可以?是否能勝利等?動態規劃的4個步驟 舉個列子 面值為2,5,7的硬幣,組裝27塊錢,最少需要多少枚?第...