1. 问题
• 一般性描述
设有m万元钱,n项投资,函数fi(x)表示将x万元投入第i项项目所产生的效益,i=1,2,…,n
问:如何分配这m元钱,使得投资的总效益最高?
2. 解析
3. 设计
#include <iostream>
#include<cstdio>
using namespace std;
#define MAX 200
void MaxProfit(int f[][MAX], int number, int money) {
int F[MAX][MAX] = { 0 }, Mk[MAX][MAX] = { 0 }, max;
for (int i = 1; i <= number; i++)
{
for (int j = 1; j <= money; j++) {
max = 0;
for (int k = 0; k <= j; k++)
{
if (F[i - 1][j - k] + f[i][k] > max)
{
max = F[i - 1][j - k] + f[i][k];
Mk[i][j] = k;
}
}
F[i][j] = max;
}
}
for (int i = 1; i <= number; i++)
for (int j = 0; j <= money; ++j)
cout << F[i][j] << " ";
cout << endl;
for (int i = 1; i <= number; i++)
for (int j = 0; j <= money; ++j)
cout << Mk[i][j] << " ";
cout << endl;
}
int main()
{
int f[MAX][MAX] = { 0 };
int m, n;
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 0; j <= m; ++j)
cin >> f[i][j];
MaxProfit(f, n, m);
}
4. 分析
5. 源码
https://github.com/Alt0191/ex7-/blob/main/%E6%8A%95%E8%B5%84%E9%97%AE%E9%A2%98