动态规划简单例子——国王与金矿(c++)

动态规划的要点:确定全局最优解和最优子结构之间的关系,以及问题的边界。以数字的形式表达就是状态转移方程式。下面以一个例子来对他们进行描述。

问题描述:

有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖 ,不能派出一半人挖取一半金矿。要求如何分配工人才能挖出最多的黄金。

第一座金矿含金500,需要5人;第二座金矿含金200,需要3人;第三座金矿含金300,需要4人;第四座金矿含金350,需要3人;第五座金矿含金400,需要5人。

思路:

对于此类提到获得最多的问题,首先想到的一定是做比较,得出在满足人员条件的情况下,选择出含金量最多的方案。

设w为工人总数,n为金矿数,p[]为金矿要的人,g[]为含金量.

将问题细小化,如果只有三座金矿,那么比较方法一定是先看第一座金矿,满足条件则记录数值,此时的员工数减去第一座金矿所需人数,再对第二座金山进行比较,看是否满足人数要求,比较挖和不挖的最大值作为当前的最优结果。以这种思路很容易可以写一个递归的程序,如下:

int getmine(int w
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kki_m

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值