1. 问题描述:
-
有m元钱,n项投资,如何分配金额到投资项目,产生效益最大?
2. 问题分析:
3. 实例分析:
实例:5万元钱,4个项目
0 0 0 0 0
1 11 0 2 20
2 12 5 10 21
3 13 10 30 22
4 14 15 32 23
5 15 20 40 24
4. 代码实现:
#include <iostream>
#include <algorithm>
using namespace std;
const int money = 5;
const int items = 4;
int f[money+1][items+1] = {
0,0,0,0,0,1,11,0,2,20,2,12,5,10,21,3,13,10,30,22,4,14,15,32,23,5,15,20,40,24
};
int F[items+1][money+1] = {0,1,2,3,4,5};
int main(){
for(int i=1;i<=items;i++){
// 投资i个项目 1 2 3 4
for(int j=0;j<=money;j++){
// i个项目总共投资j万元 0 1 2 3 4 5
for(int k=0;k<=j;k++){
// i个项目投资j万元的收益等于第i个项目的投资k万元的收益加上前i-1个项目投资j-k万元的收益
if(F[i][j] < f[k][i] + F[i-1][j-k])
F[i][j] = f[k][i] + F[i-1][j-k];
}
}
}
cout<<"money : 01 02 03 04 05"<<endl;
for(int i = 1;i<items+1;++i){
cout<<"items"<<i<<": ";
for(int j = 1;j<money+1;++j)
cout<<F[i][j]<<" ";
cout<<endl;
}
/*
最后的投资矩阵F[][]横排1 2 3 4 5为投资金额
竖排为4个投资项目 元素为在投资钱数1 2 3 4 5确定的情况下 投资前1 2 3 4个项目所获得的最大价值
那么这样 退出最后一个元素的含义是在投资5万到4个项目时获得到最大投资回报
*/
cout<<endl<<"最大投资回报:"<<F[items][money]<<endl<<endl;
system("pause");
return 0;
}
5. 输出结果:
money : 01 02 03 04 05
items1: 11 12 13 14 15
items2: 11 12 16 21 26
items3: 11 13 30 41 43
items4: 20 31 33 50 61
最大投资回报:61
请按任意键继续. . .
Process returned 0 (0x0) execution time : 0.816 s
Press any key to continue.
- ——————END-2022-03-30——————
- 个人学习笔记,如有纰漏,敬请指正。
- 感谢您的阅读。