算法课-动态规划

问题

给出个投资项目,每个项目有种投资方式
个项目第种投资方式需要花的钱,最后会得到的钱
现在你有共有总量为的钱,合理分配,最终最多能赚多少钱

解析

表示前个项目共花费元能够得到的最大价值
则选择第个第种投资方式能得到的最大价值应该是
证明:的任意一个确定状态的子决策都是此状态下的最优决策

  • 已知是前个项目共花费元能够得到的最大价值
  • 假设子决策不是这种状态下能得到的最大价值
  • 那么一定存在另一个子决策
  • 用这个子决策替换原来的子决策,必然可以得到一个更大的,这与之前的假设想冲突,因此不存在这个一个
  • 得证

设计

for (int i = 1; i <= n; ++i)
    {
        for (int j = m; j >= 0; --j)
        {
            for (int k = 0; j - k >= 0 && k <= o; ++k)
            {
                dp[i][j] = max(dp[i][j], dp[i - 1][j - k] + f[i][k]);
            }
        }
    }

分析

一共三层循环,第一层n次,第二层m次,第三层o次
总复杂度

源码

传送门

全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
2025-12-17 13:34
复旦大学 算法工程师
回家当保安:复旦✌🏻,佬你的简历感觉挺好的,寒假日常hc比较少。佬可以过完年之后再试试,日常实习hc比较充足
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务