POJ 1821 DP+单调队列

题目链接 POJ 1821

首先先吐槽高校邦这恶心的东西,不仅无法在后台挂着,而且视频还内嵌题目,说白了就是他娘的弹窗暂停。这就意味着我不得不像while(1)那样时不时的盯着旁边的那台电脑。这感觉简直烦透了。。(要是有select/epoll这类的东西多好)

题目核心是DP,状态转移方程为

dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i-1][j]+worker[i].P * (j-k) )

由于dp[i-1][j]+worker[i].P*j为定值,因而只需要找k符合相对小的worker[i].P*k,与j无关因而使用i层次上的队列。

哦对.. POJ的G++编译器就是个谜啊= = sort算法在我本机上是没问题的,但是submit之后就CE. 原因也很迷... 如果以成员函数重载运算符,那么无论是const _worker&,_worker&亦或是与const属性的结合,都不能通过编译。如果以友元函数重载运算符,那么引用必须为const.... 简直邪门...

这个队列不能用vector,因为涉及到首元素的pop。也不能用queue,因为涉及到pop_back。最后... 也不能用list,因为TLE... 

用deque就好了,数组模拟有点复杂不适合。(而且为什么deque才200多ms,,,数组700多ms....)

AC代码 View Source On GitHub



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值