2021-04-17

2021-4-17
线性dp作业总结
(总结了我从4-1到4-17所做过的15道题,难度,种类,方法各不相同,有常规经典的也有古怪偏僻的,希望能够帮助大家一把。)
1,Jumping Cows(独创思路)
(特别注意:如果是提交poj的不用多组输入,如果是hdu的必须多组输入,做法是相同的。)

题意:给n个数,开始sum为0,要求如果是奇数次选择就加,如果是偶数次选择就减。必须按照顺序选择,但可以跳过一些元素不选择。

思路,dp【u】表示截止到这个元素最大的sum值。第一个元素肯定是加,到第二个元素,如果第二个元素大于第一个的就将dp【1】的减去第一个元素加上第二个,如果第二个元素小于第一个的话就减去第二个。推广开来,如果第i个元素大于第i-1个元素,分两种情况1,如果第i-1个元素是加上的,就将第i-1个dp减去第i-1个值然后加上第i个元素2,如果第i-1个元素师减去的话,就将第i-1个的dp加上第i个元素值。如果第i个元素小于第i-1个元素1,如果第i-1个事加上就直接减去第i个元素2,如果第i-1个元素师减去,就将dp【i1-1】加上第i-1个元素然后减去第i个元素。

总结,这道题运用了dp的一个重要方法,就是情况的列举,推测出上一步或者是下一步所有的情况这是非常重要的。这题线性思路明显,不难看出该点的状态值和上一步的选择有关。

2,Tickets

题意,有n个人在买票,可以每个单独买票,也可以和相邻的人一起买票(测试数据中两个一起的时间一定小于单独买票的和),问如何才能使得买票时间最短。

错误思路,假如有3个人,将1和2一起买票的时间和2和3一起买票的时间作比较。这种思路虽然是dp但是不能够保证到第三个人的总得买票时间最小。

正确思路,三个人一组进行分析,用dp【i+1】+a【2】和dp【i】+a【3】进行比较,这样求出的值,就是截止到第i+3个的最小买票时间。

总结,这题也有个dp非常重要的思想,比较,常常用min和max来体现,以三个人为一组,三个之前的总买票时间已经确定了,所以考虑三个买票时间的最小值,而这就是个比较的思想。

3,Employment Planning

题意,每个月都有需要的人数,开始公司为零人,雇佣人需要花钱,解雇人也需要花钱,每个月还要给在职的工人发钱(及时这个月不需要他,但是他依然在职),问最少的花费是多少。

思路,找出某一个月份的最大雇佣工人。截止第一个月只能把第一个月的雇佣费和工资算出来。dp【i】【j】表示第i个月雇佣j个人,第一重循环从2开始第二重循环从1到最大的人数,第三重循环是上一个月雇佣的最少工人到最大的人数。如果第三重循环数如果第二重循环数,说明是解雇人反之就雇佣人。第i个月雇佣j个人的最小值是取决于上个月雇佣的多少人,而且这个月雇佣j个人可能不是这个月花费的最小值,但一定是这个月雇佣j个人所话费的最小值,所以只要求出第n个月雇佣人从最小值到最大值的最小值就可以了。

总结,这题从正面考虑是没法用数学方法求出每个该雇佣多少人,但是每个月雇佣多少人一定是上一个月雇佣特定人数之后的出来的最小值。这题提示我们可以将这个月->所有<-情况列举出来作为一个状态,然后进行转移。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值