投资问题:
设m元钱,n项投资,函数f;(x) 表示将x元投入第i项项目所产生的效益,i=1,2,-.n.
问:如何分配这m元钱,使得投资的总效益最高?
解析
优化原则:一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列。
该算法满足优化原则。
设计
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;
}
}
}
分析
复杂度:W(n,m) =O(nm ^2)
源码
https://github.com/pt0918/-/blob/master/Invest_problem.cpp