《算法分析与设计》-作业7 投资问题

问题

设m元钱,n项投资.效益函数fi(x)表示将x元投入第i个项目所产生的效益, i=1,2,3,…,n。问:如何分配这m元钱,使得投资的总效益最高?

解析
  1. 递推公式。设Fk(x)表示x万元投给前k个项目的最大收益,k=1,2,…,n, x=1,2,…,m
    我们可以得到递推方程和边界条件:
    递推方程:Fk(x)=max0≤xk≤x{fk(xk)+Fk−1(x−xk)},k=2,3,…,n
    边界条件:Fk(x)=max0≤xk≤x{fk(xk)+Fk−1(x−xk)},k=1,2,…,n
    第k步,前后共分配x万元,分配给第k个项目为xk;x-xk万元分配给前k-1个项目。
  2. 证明满足优化原则
    优化原则:
    一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列。
  3. 初步分析可以知道:
    第一个项目: 投资第一个项目的钱不超过x最大收益就是f1(x)。
    第二个项目: 第二个投资F2(x)是当xk元钱投资给第二个项目得到的效益加上x−xk元钱投资给前一个项目的最优,然后再在这里面取最大值。
    ……
    第n个项目: 第n个投资Fn(x)是当xk元钱投资给第n个项目得到的效益加上x−xk元钱投资给前n−1个项目的最优,然后在这里面取最大值。
设计

核心代码:

void invest(){
   
    int i,j,k,t;
    for(k=2;k<=n;k++){
   
        memset(F[k],-
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值