設m元錢,n項投資,函式fi(x)表示將x元投入第i項專案所產生的相依 i = 1 , 2 …. n
問:如何分配這m元錢,使得投資的總效益最高。
1.我們設dp[i][j]為前i個專案花費j元所能得到的最大收益
2.假設我們分配個第i個專案k元, 那麼實際上前i-1個專案一共得到了j – k元
因此 dp[i][j] 的最優狀態 可以由 dp[i - 1][j - k] + fi (k)中的最優子決策得到。
for (int i = 1; i <= n; ++i)}}時間複雜度 : o(n * m * m)
空間複雜度 : o (n * m)
1 #include2 #include完整**3 #include4 #include5
using
namespace
std;67
8int n, m; //
n代表專案的數量 , m代表投資的金額
9int val[1000][1000]; //
使用者儲存給第i個專案投資x萬元,能夠獲得val[i][x]萬元的收益
10int dp[1000][1000] = ; //
dp[i][j]表示到第i個專案的時候已經花費了j萬元的最大收益
11int
main()
1221}22
23for (int i = 1; i <= n; ++i)
2437}38
}39 cout << dp[n][m] <
40return0;
41}4243
44/*
45樣例輸入:
464 5
470 11 12 13 14 15
480 0 4 10 15 20
490 2 10 30 32 40
500 20 21 22 23 24
51樣例輸出:
5261
53*/
《演算法分析與設計》 作業7 投資問題
問題 設m元錢,n項投資.效益函式fi x 表示將x元投入第i個專案所產生的效益,i 1,2,3,n。問 如何分配這m元錢,使得投資的總效益最高?解析遞推公式。設fk x 表示x萬元投給前k個專案的最大收益,k 1,2,n,x 1,2,m 我們可以得到遞推方程和邊界條件 遞推方程 fk x max0...
演算法分析與設計 投資問題之動態規劃
設有m萬元錢,n項投資,函式fi x 表示將x萬元投入第i項專案所產生的效益,i 1,2,n 問 如何分配這m元錢,使得投資的總效益最高?遞推公式 優化原則 乙個最優決策序列的任何子串行本身一定是相對於子串行的初始和結束狀 態的最優決策序列。已知 這個序列 l1 是最優決策序列 那麼 這個序列任何子...
演算法分析與設計作業7 動態規劃 投資問題
設m元錢,n項投資,函式fi x 表示將x元投入第i個專案所產生的效益 i 0,1,2,3 n 問 如何分配這m元錢,使得投資總效益最高?將這個問題分割開看,將一部分資金x元分割給第k個專案,那麼剩下k 1個專案分得資金m x元,零gk x 表示將資金x分給前k個專案的最大利潤,則求max fk x...