设m元钱,n项投资,函数f(x)i表示将x元投入第i项项目所产生的的效益,i=1,2,3…n.问:如何分配这m元钱,使得总效益最高?
#include<iostream>
#include<vector>
using namespace std;
int main() {
int m, n;
int i, j;
int tmp_m, tmp_F = 0;
cin >> m >> n;
vector<vector<int>> f(n, vector<int>(m + 1));
vector<vector<int>> F(n, vector<int>(m + 1));
for (i = 0; i < n; ++i) {
f[i][0] = 0;
}
for (i = 0; i < n; ++i) {
for (j = 1; j < m + 1; ++j) {
cin >> f[i][j];
}
}
for (j = 0; j < m + 1; ++j) {
F[0][j] = f[0][j];
}
for (i = 1; i < n; ++i) {
for (j = 0; j < m + 1; ++j) {
for (tmp_m = 0; tmp_m <= j; ++tmp_m) {
tmp_F = F[i - 1][j - tmp_m] + f[i][tmp_m];
if (tmp_F > F[i][j])
F[i][j] = tmp_F;
}
}
}
cout << F[n - 1][m] << endl;
}
复杂度 W(n,m) =O(nm ^2)