“迎新春,贺新年,LJ24祝大家新年快乐”新春赛总结

动态规划 棋盘模型 状压DP 背包DP LCA


A.骑士

  国际象棋中骑士的移动规则和中国象棋中的马是类似的,它先沿着一个方向移动两格,再沿着与刚才移动方向垂直的方向移动一格。路径上的棋子并不会影响骑士的移动,但是如果一个骑士走到了一个放有棋子的格子,它就会攻击那个棋子。现在有一个n*n的棋盘,有k个骑士需要被摆到棋盘上去。那么使所有骑士互不攻击的摆放方式一共有多少种呢?
因为骑士的攻击范围能涉及两格,所以状态设为f[讨论到i层][第i层摆放情况][第i-1层摆放情况][骑士数](f[i][s][s1][k])
check某两层s和s1是否冲突时,如果层数相差1,就只有左右攻击可以影响,s<<2和s>>2 & s1都等于0;层数相差2,只有上下攻击可以影响,s<<1和s>>1 & s1都等于0

CQNK P1471


B.商品促销

  在一个商店里每种商品都有一个价格。为了吸引更多的顾客,该商店推出了一些优惠促销活动。
  一种优惠是一次购买多个商品可以获得减价。请你写一个程序帮助顾客计算享受优惠后,他需要支付的费用,顾客们总是选择最佳的优惠,所以,应该使费用尽可能的低。
只有5种物品,直接6进制状压再跑一个朴素的背包,要注意优惠是无限的,for循环不需要逆序

CQNK P1903


C.zengaa的演唱会

  根据歌曲的难易度不同,zengaa学第i首歌需要花费Ai点体力,唱第i首歌需要花费Bi点体力(唱之前需要先会)。zengaa一开始一共有HP点体力,如果剩余的体力已经不够让他干任何事情的话,他就会在群里摇个骰子睡大觉。
  而LJ24也是非常挑剔的,如果第i首歌是zengaa第一次唱,他们就会很兴奋,增加Xi点兴奋值;如果第i首歌之前已经唱过了,LJ24就只会增加Yi点兴奋值;但如果zengaa很敷衍,第i首歌连续唱了两次(上一次也唱的第首歌),LJ24就只会增加悲剧的Zi点兴奋值。
  他想知道,在自己睡觉之前,LJ24最多能有多兴奋。
由题意设状态f[唱了哪些歌][当前消耗的体力][最后唱的歌](f[s][v][i])所以状转为

要注意for循环的顺序,因为每次转移时都会用到别的歌曲,所以枚举体力要放在枚举歌曲的外面;且第一次唱时可以从虚空转移来

CQNK P10110


D.奶牛政坛

每个草地的父节点Pi。根节点的Pi等于0,表示它没有父节点。因为奶牛建立了1到K一共K个政党。每只奶牛都要加入某一个政党,第i只奶牛属于第Ai个政党。而且每个政党至少有两只奶牛。这些政党互相吵闹争。每个政党都想知道自己的“范围”有多大。其中,定义一个政党的范围是这个政党离得最远的两只奶牛(沿着双向道路行走)的距离。
混进来了一道lca,这道题只要得出了思维结论后就是一道水题了——每个政党里深度最大的奶牛一定是离得最远的两只奶牛之一,证明:
如果u号点深度最深, 但离得最远的两只奶牛是x和y。
-> 假设最远的路径会经过x和u的LCA,此时y从LCA向u走明显更远。
-> 假设不经过,那x和u的LCA一定是x和y的LCA的祖先,y连向u会更远
每个政党就只需要用最深的奶牛和其他奶牛求lca,取最大距离就是ans

CQNK P2044


总结:调代码调得太久了,导致没时间做后面的题,太菜了
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值