P4067 [SDOI2016] 储能表 题解

[SDOI2016] 储能表 - 洛谷

题目详情 - [SDOI2016] 储能表 - BZOJ by HydroOJ

  • 一道很好的数位 dp 题

  • 不过这题有一个比较有意思的性质:当 n,m2k 的形式时,最终得到的数组对每一行排序后为 0m1 的排列,如果有的话说不定可以作为一个部分分?

  • 遇到二进制运算,通常不是按位考虑就是数位 dp 。这题按位考虑不现实,因为 >K 的约束条件比较严格,我们不能通过单纯的判断数位的某一位来知道这个数是否 >K ,因此我们考虑数位 dp

  • 最终答案是什么?记 异或值 >K 的对数 S1 和 异或值 >K 的异或和 S2 ,则最终答案为 S2S1×K

    • 设计状态: fi,0/1,0/1,0/1 表示考虑到第 i 位,n 的上界有没有取到、 m 的上界有没有取到、 K 的下界有没有取到的最终答案。再设一个辅助转移数组 gi,0/1,0/1,0/1 定义相同,但记录的是对数。

    • 初始化:fi,a,b,c0,gi,a,b,c0,g62,0,0,01

    • 转移:记下一维的状态为 a,b,c ,第 i 位填的数为 zzK 的第 i 维为 z

    • (1)gi+1,a,b,cgi,a,b,c(2)fi+1,a,b,c+2i×(zzz)×gi+1,a,b,cfi,a,b,c

    • 最终答案: f0,0,0,0 ,因为下标是从 0 开始,所以前两项不用取到。因为异或和为 K 的会被减掉,因此不用考虑 K 的情况,第三项不用取到

  • 最终复杂度 O(Tlogn)

posted @   FOX_konata  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示