Codeforces Round #829E 1753E. N Machines

博客围绕按顺序对n个因子进行加或乘运算展开,可花费代价移动因子,总花费有限制且结果要在2e9以内。思路是移动加因子到最前、乘因子到最后,用深度优先搜索枚举乘法因子移动情况并剪枝,还可通过数据结构或二分法求加法移动收益。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意

按顺序给n个因子 加或乘 比如+a 或×a

可以花费代价p和m 移动两种因子到任意位置

总花费限制b

保障结果在2e9以内

思路

首先如果移动加一定移动到最前 移动乘到最后

想了一下区间dp 但是左右区间互相影响 无法消除

发现这个保证很有用 他确保了乘法因子的总大小

为1的乘法因子不必考虑 >1的乘法因子不超过30个

那么可以dfs枚举哪些乘法因子要移动

枚举时有一个很重要的剪枝 就是如果前面的×a1 枚举了不移动 那么后面的×a2 如果a2<=a1 也是必定不移动的

复杂度会降很多 只能构造2,3,5,7,11这样的乘法因子 就会位数更少 

剩下的加法因子 可以用数据结构区间更新乘上前面的乘法倍数得到移动收益 再求top k收益

后来发现不用那么麻烦 把每个乘法因子前面的加法因子整合成一组 二分第k大的加法移动收益 看是否有k个刚好>=此收益的

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值