ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

「考试」noip模拟2

2021-05-23 20:01:47  阅读:144  来源: 互联网

标签:方案 这个 noip 离散 棋子 模拟 区间 转移 考试


排序

考场上的想法是求出一种然后全排列,但是没有意识到可以操作的组合可能是不同的
首先可得到一个结论:操作的先后顺序对结果没有影响,所以每找到一种合法的操作组合,就可以将阶乘计入答案
因为有这个结论,所以不妨从低位向高位考虑,因为高位修改不改变低位,所以在扫到高位时,低位应该已经修改好了
也就是说,当考虑 \(2^i\) 的区间时,所有长度为 \(2^{i-1}\) 的区间都应该是依次排好顺序的
那么可以用 dfs 来向下递归解决问题,在 \(i\) 层尝试将所有 \(2^i\) 的区间排好序
这个时候所有有序的 \(2^{i-1}\) 区间连接处可能不满足所求,有以下几种情况:

  • 没有这样的情况,可以直接向下一层递归
  • 只有一处,那么将这两个 \(2^{i-1}\) 区间互换
  • 只有两处,那么将这两组 \(2^{i-1}\) 区间每组选一个来互换,共有四种方式
  • 超过两处,这时不可能排好序了,直接跳出

另外,即使这样换也只能保证大小有序,还需在换后验证是否连续来剪枝

划艇

题意:给定变量 \(A_{1...n}\) 的范围 $ [a_i,b_i] \cup {0 }$,求选出一个 大于 0 的所有数能组成严格上升序列 的序列 的方案数
首先很明显这个 \(1e9\) 的范围需要离散化,但是思路卡在了离散化后同区间内贡献的计算上
类似于暴力 dp,设 \(f_{i,j}\) 表示前 \(i\) 个数,第 \(i\) 个选在第 \(j\) 段里的方案数
如果继续按照暴力的想法就陷入了思维陷阱:从 \(i-1\) 转移到 \(i\),两个数在同区间内的贡献不好计算
为什么这样不能算,根本原因是不知道 \(i-1\) 里选的数到底是啥,而如果另记录这个数,离散化就没意义了
这个时候应该考虑抛开 \(i-1\) 的具体数值,而使转移更多的和离散后分成的 \(2n\) 个区间联系在一起
暴力的转移中,我们一个一个加数,而这时既然离散成了很多区间,能不能按区间加数呢
如果这样,就先需要枚举出 \(i\) 之前,在这个区间里的数向左延伸到了多少,设其为 \(k\),那么就能有类似于 \(f_k * w_{k+1,i}\rightarrow f_i\) 的转移
因为复杂度 \(O(n^3)\) 已经可以接受,现在的目标就变成了求出转移里的 \(w\)
在这里,\(w\) 就是原数列一段区间内,用同一个离散化区间里的数组成上升序列的方案数
首先,这个原数列的区间里,只有一部分的取值范围与这个范围有交集,而其他的就都是 0
对于有可能不为零的数,设有 \(k\) 个,若当前范围长度为 \(L\),要解决的问题即可转化为:用 \([0,L]\) 组成一个除 0 外严格递增的长度 \(k\) 的数列的方案数
为了方便统计,钦定 \(f_i\) 中第 \(i\) 位必选,那么这个问题的答案即为 \(C_{L+k-1}^k\)
那么现在就可以转移了,按顺序加入区间,类比01背包倒着更新每一个位置
这样就不需要第二维了,前缀和优化掉
因为 \(L\) 的范围不好直接算组合数,所以可以直接用公式递推处理

放棋子

因为一种棋子放下后,会有一些行列被控制,而对于剩下的将由另外种类的棋子控制的行列,就转化成了新的子问题
首先分开计算每种棋子控制每种行列数量的方案,然后合起来就能得到所有种类棋子控制每种行列数量的方案
最后每个种类乘一个组合数求和就得到了答案

计数dp一直都是比较头疼的一块qaq感觉还没有找到要领,希望尽快能不要一见模数就敲起 dfs 吧qaqaq

标签:方案,这个,noip,离散,棋子,模拟,区间,转移,考试
来源: https://www.cnblogs.com/zzzuozhe-gjy/p/14801836.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有