要求:現有x萬元資金可以投資給m個專案,先給出三個專案分別投資0~x萬元可得的利益,其求出如何分配這x萬元可以使得得到的利益最大化。
(本題以投資金額為7萬元資金以及a、b、c三個專案為例)
解題思路:
這道題目是分成的專案是三個,所以可以將整個解題思路分為三個階段。
第一階段:只考慮a乙個專案,即將所有的資金都投資給a,那麼此時可以獲取的利益就是:
第二階段:將b專案加進去,即投資的資金可以同時分配給a、b兩個專案,那麼此時可以獲取的利益為:
第三階段:將c專案加進去,即投資的資金可以同時分配給a、b、c三個專案,同樣可以用上述方法得到此時能獲取的利益。
c++**:
#include
using
namespace
std;
typedef
struct
allot;
void addchoice(allot *fx,float **temp,int stage,int n,float *fx[4]) //stage表示當前為第幾階段
void updata(allot *fx,allot *fore,int stage,int i,int j,int n) //更新各個專案的資金分配情況
else
if(stage==3)
}void findmax(allot *fx,float **temp,int stage,int n) //更新當前最大利益
}updata(fx,fore,stage,i,pos,n);
}}int main()
fx=new allot[n+1]; //存放當前利益最大的分配方法
for(i=0;i<=n;i++) //第一階段(將所有的資源都分配給a專案)
temp=new
float *[n+1];
for(i=0;i<=n;i++)
temp[i]=new
float[n+1];
for(i=2;i<=3;i++) //階段
二、三
cout
<
cin>>fund;
cout
<
0;}
在更新存放當前最大利益的陣列fx的a、b、c三個專案各自分配的資金時,因為需要用用到上一階段的分配資料,所以用了for(t=0;t<=n;t++) fore[t]=fx[t];這一操作來存放上一階段的分配情況。當然在存放當前最大利益是也可以選擇在每一階段都定義乙個fxi(i=1,2,3)陣列。這樣就不需要for(t=0;t<=n;t++) fore[t]=fx[t];這一操作。 投資問題 動態規劃問題
動態規劃 是一種多階段決策過程最優的通用方法 優化原則 乙個最優決策序列的任何子串行本身一定是相對於子串行的初始和結束狀態的最優決策序列 我的理解是 假設s3a3b4c4t4 最優化的未知 是最優化的,即是 所有的s中某點 到 所有的t中某點 最短的選擇路徑 按照優化原則,即是s3a3b4ct4中任...
動態規劃之投資問題
1 問題描述 有m元錢,n項投資,f i x 代表將x元投入到第i個專案中的收益,求最大的收益。2 輸入 第一行為總錢數m和總專案數n 接下來為n行輸入,每行m個,代表f i x 3 輸出 最大收益 4 解析 動態規劃問題一般分為兩類 中間狀態類和累積狀態類。前者的引數是相同的,後者的引數不同,而且...
動態規劃求解投資問題
問題 設 m 元錢,n 項投資,函式f x 表示將 x 元投入第 i 項專案所產生的效益,i 1,2,n.問 如何分配這m元錢,使得投資的總效益最高?解析可以設dp i j cost i j 陣列,dp代表花費j元投資前i項的所獲取的最優效益,cost代表dp i j 情況在第i專案上花費的金額,從...