2020.12.12【NOIP提高B组】总结

这是一个好东西->作者主页

T1 整除

题目大意:

给出n个数a1,a2……an,求区间[L,R]中有多少个整数不能被其中任何一个数整除。

思路:

  1. 暴力查询[L,R]的区间,然后判断,30分
  2. 利用容斥原理,判断最小公倍数,将[1,R]和[1,L-1]的值相减得出答案,100分
T2 新壳栈

题目大意:给定一个栈,可以支持压入、弹出和翻转的操作,求每一次弹出的值。
思路:其实这一题我都没想到是暴力出奇迹……
直接模拟每一次操作,注意用 s c a n f scanf scanf就行了。

T3 铺砖问题

题目大意:求用 1 × 2 1×2 1×2的砖块铺满 n × m n×m n×m的格子图的方案数 m o d mod mod 1 0 9 + 7 10^9+7 109+7
思路:

  1. 搜索每一个点放什么样的砖块,20分
  2. 状态压缩 d p dp dp,设 d p i , S dp_{i,S} dpi,S表示前 i − 1 i-1 i1行已经填满,第 i i i行还有一些空位,状态为 S S S,那么通过搜索可以推出公式,50分
  3. 状态压缩加矩阵乘法, f n , ( 1 , 2 , . . . , 2 m − 1 ) = f 1 , ( 1 , 2 , . . . , 2 m − 1 ) × C n f_{n,(1,2,...,2^m-1)}=f_{1,(1,2,...,2^m-1)}×C^{n} fn,(1,2,...,2m1)=f1,(1,2,...,2m1)×Cn ,如果 f i , S f_{i,S} fi,S能从 f i − 1 , T f_{i-1,T} fi1,T转移过来,那么 C S , T C_{S,T} CS,T等于1
T4 偷懒的西西

题目大意:有 n n n个数,让你取出任意数,保证取出的数的和不大于 t t t。定义 G G G为剩下的数的连续段的最长长度,那么输出所有取法中最小的 G G G
思路:

  1. 二分枚举 G G G,每次做一次 d p dp dp,动态规划时间复杂度 n 2 n^2 n2,60分
  2. 在1的基础上把动态规划的第二层循环优化掉,可以用单调队列或者线段树,100分

提示:

  1. d p i dp_{i} dpi表示取了 a i a_i ai后,前面都满足的情况下的最小和。
  2. 枚举 j j j i − m i d − 1 ≤ j < i i-mid-1≤j<i imid1j<i d p i = m i n ( d p i , d p j + a i ) dp_i=min(dp_i,dp_j+a_i) dpi=min(dpi,dpj+ai)
  3. 因为第二层循环是枚举区间最小值,所以可以用线段树

完成情况
  • T1
  • T2
  • T3
  • T4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值