投資分配問題_動態規划


1先簡單描述一下這類題的通解思路

下面是一道具體的例題

例題: 設國家撥給60萬元投資,供四個工廠擴建使用,每個工廠擴建后的利潤與投資額的大小有關,投資后的利潤函數如下表所示。

 

解:依據題意,是要求 f4(60) 

 

 

根據思路可以模擬出一下代碼

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int M;
 4 int N;
 5 int main()
 6 {
 7     cout << "請輸入工廠的個數和每個工廠所有的可能投資額個數:"<< endl;
 8     cin >> M >> N;
 9     cout << "請輸入國家最大投資額" << endl;
10     int money;
11     cin >> money;
12     int array[M][N];//每個工廠在所有可能投資額下的獲取利潤
13     int array1[M][N];//在某投資額下前M個工廠可以獲取的最大利潤
14     int path[M][N];//記錄在某總投資額下投資一部分資金給第M個工廠下時獲取最大利潤時這個部分投資額的數值
15     memset(array,0,sizeof(array));
16     memset(array1,0,sizeof(array1));
17     memset(path,0,sizeof(path));
18     cout << "請依次輸入每個工廠在所有可能投資額下的獲取利潤:"<< endl;
19     for(int i=0;i<M;i++){
20     cout << "請輸入第" << i+1 << "個工廠的所有可能投資額下的獲取利潤:" << endl;
21         for(int j=0;j<N;j++){
22         cin >> array[i][j];
23         }
24     }
25     for(int i=0;i<M;i++){
26         for(int j=0;j<N;j++){
27             if(i==0){
28                 array1[i][j]=array[i][j];
29                 if(array[i][j]>path[i][j]){//第一個工廠直接全部分配給自己
30                     path[i][j]=j;//全部投資額都給自己
31                 }
32             }
33             else{
34                 int maxnum=0;
35                 for(int k=0;k<N;k++){
36                     if(j-k>=0){//保證投資給除了自己之外的工廠的投資額不能大於總投資額
37                         if(array1[i][j]<array[i][k]+array1[i-1][j-k]){//獲取收益最大值時投資給自己的投資額
38                             array1[i][j]=array[i][k]+array1[i-1][j-k];//更新
39                             path[i][j]=k;//記錄投資給自己多少;
40                         }
41 
42                     }
43                     else{
44                         break;
45                     }
46 
47                 }
48             }
49         }
50     }
51     cout <<"最大利潤為" <<array1[M-1][N-1]<< endl;
52 
53     //cout << "每個" << endl;
54     money/=10;
55     for(int i=M-1;i>=0;i--){
56         cout <<""<<i+1<<"個工廠投資額為" <<path[i][money]*10<< endl;
57         money-=path[i][money];
58 
59     }
60 
61 }

運行結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM