算法分析与设计
投资问题之动态规划
问题描述:
设有m万元钱,n项投资,函数fi(x)表示将x万元投入第i项项目所产生的效益,i=1,2,…,n
问:如何分配这m元钱,使得投资的总效益最高?
算法思路:
- 递推公式
- 优化原则:一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状
态的最优决策序列。
已知:这个序列 L1 是最优决策序列
那么:这个序列任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序
列。
核心代码:
for(int i=1;i<=n;i++)
for(int j=0;j<=m;j++)
for(int k=0;k<=j;k++)
if(f[i-1][j-k]+v[i][k]>f[i][j]){
f[i][j]=f[i-1][j-k]+v[i][k];
x[i][j]=k;
}
时间复杂度:
for i 1->n
for j 0->m
for k 0->j
综上所述,分析可得算法的时间复杂度近似为O(n*m^2)。
源码:
https://github.com/SpiritDemon-max/myText/blob/master/dpInvest.cpp