这个题刚好是一个月前我们学校联赛组的人考的题的 T4 。今天有幸看见原题。

我当时顺便看了他们的题。想了一个小时,才想出来了如下的麻烦做法。

然后教练让我来讲这个题,我讲得很累,大家也都没有改。

题意:

有一个初始序列 \(a_1,a_2,…,a_{2n}\) ,其中 满足 \(1\le i\le n\) 的 \(i\) 一定出现恰好两次。

你会进行若干轮操作,每次从前往后依次考虑每个 \(i\),如果 \(a_i>0\) 且存在 \(i<j\) 满足 \(a_j=a_i\) ,那么就 \(a_i\) 就将减少 \(1\) 。

最后会有 \(n\) 个位置满足 \(a_i>0\) 。给定这 \(n\) 个位置,求有多少个初始的 \(a\) 满足条件。

做法:

令一个可重集 \(S\) 的“生成序列”\(s_i\) 满足 \(s_i=\sum_{x\in S} [x\le i]\) 。我们把那些最后 \(a_i>0\) 的位置涂成黑色。

令 \(M(S)\) 是满足 \(s_i=i\) 的最大的 \(i\) 。

考虑从后往前填初始的 \(a_i\)。如果一个位置是黑色的,那填入的权值 \(x\) 需要满足 \(x>M(S)\) ,然后把 \(x\) 加进 \(S\) ,否则,需要满足 \(x\le M(S)\) 。(这里的正确性读者自行思考。

我们要关注 \(M(S)\) 的变化,因为 \(x\) 的范围也随之变化。

令 \(dp_{i,j}\) 表示,从第 \(2n\) 个格子到第 \(i\) 个格子,当前 \(M(S)=j\) 。

1.加入黑色格子

在加入一个黑色位置时,我们不急着往里面填数。我们只会填那些满足 \(x_i\le M(S)\) 的数。

在 \(M(S)\) 发生变化,从 \(m\) 变成 \(m'\) 时,在空格子里选 \(m-m'\) 个,强令他们满足 \(m<x\le m'\) 。并且要选最后一个。设当前考虑到了第 \(i\) 个黑格子,则选择位置的方案数是 \(\tbinom{i-m-1}{m'-m-1}\) 。

现在我们填这 \(L=m'-m\) 个空格。令 \(g_i\) 是从前往后这些空格填的数, \(b_i=g_i-m\) ,则 \(1\le b_i\le L\) 。(填 g 的方案数只与 \(L\) 相关。我们设这里的方案是 \(F_L\) 。)

如果把 \(b_1\) 到 \(b_{L-1}\) 加入一个集合 \(T\) ,则 \(M(T)=0\) 。也就是说,\(T\) 的生成序列 \(s\) 满足,对于 \(i\geq 1\) ,都有 \(s_i<i\) 。

现在考虑从 \(1\) 到 \(L\) 把权值填入 \(b\) 中。在状态中记录前 \(L-1\) 个里已经填了 \(j\) 个,并且最后一个是否被填。即 \(f_{i,j,0/1}\) 。转移读者自行思考。

显然 \(F_L=f_{L,L-1,1}\) 。

有 \(dp_{i+1,m}\tbinom{z-m-1}{m'-m-1}F_{m'-m-1}->dp_{i,m'}\) ,其中 \(z\) 是 \(i\) 到 \(2n\) 中黑格子的个数。

当然,\(M(S)\) 没有改变的话,因为暂时不填,有 \(dp_{i+1,m}->dp_{i,m}\) 。

2.加入白色格子

在加入这个格子之前,有恰好 \(m\) 个黑格子满足权值 \(\le m\) ,并且白格子都满足 \(\le m\)。

令前面有 \(p\) 个白格子,则只剩下 \(m-p\) 种可能。但有一些权值会出现两次,这就算重了。

3.处理重复的问题,填黑色格子对后面白色格子的影响

\(M(S)\) 从 \(m\) 到 \(m'\) ,相当于权值在 \((m,m']\) 的数,有一半填入黑色格子,有一半留着给白色格子。

如果有一个权值,在黑格子中没出现,在白格子中出现两次,则它会使答案除以 \(2\) 。

所以我们重定义 \(F_i\) ,令 \(1\le i\le L\) 中没出现过的权值个数有 \(c\) 个,则 \(F_L\) 表示所有方案的 \(2^{-c}\) 的和。

这样就解决了白格子的重复问题。

复杂度是 \(O(n^3)\) 。

P7213 [JOISC2020] 最古の遺跡 3的更多相关文章

  1. FC红白机游戏列表(维基百科)

    1055个fc游戏列表 日文名 中文译名 英文版名 发行日期 发行商 ドンキーコング 大金刚 Donkey Kong 1983年7月15日 任天堂 ドンキーコングJR. 大金刚Jr. Donkey K ...

  2. N1考试必备词汇

    相次ぐ あいつぐ 淡い あわい 合間 あいま 渋い しぶい 相俟つ あいまつ 慌てよう あわてよう 明るい あかるい 安易過ぎる 明らか あきらか 用心 ようじん 悪事 あくじ 案の定 あんのじょう ...

  3. MIS2000 Lab,我的IT人生与职场--从零开始的前十五年 与 我的微创业

    http://www.dotblogs.com.tw/mis2000lab/archive/2014/09/16/ithome_2014_ironman.aspx [IT邦幫忙]鐵人賽 -- MIS2 ...

  4. [zw]薰衣草/紫花苜蓿+桑椹/(黑红蓝)霉等植物

    有趣的问题 为什么越长大觉得时间过得越快? 另参考,讨论的比较深刻 为何人随着年龄的增大觉得时间过得越来越快? 小时候,你会花上十分钟去观察一只蚂蚁的活动. 小时候,走路上碰到一只鸟儿你都会新奇不已. ...

  5. 【分享】GEARS of DRAGOON 1+2【日文硬盘版】[带全CG存档&amp;攻略+SSG改动+打开存档补丁]

    冒险者们哟.寻找龙秘玉吧--! ninetail的最新作,是使用丰富多彩的技能·道具探索迷宫的3D迷宫RPG! 存在着骑士和神官的架空世界常见的职业为首的13种职业.超过数百种的道具的登场! 和伙伴一 ...

  6. LINUX命令总结 -------来自 水滴娃娃 的CSDN

    LINUX命令总结 标签: LINUX命令总结 2014-01-27 15:54 41039人阅读 评论(1) 收藏 举报  分类: linux(1)  版权声明:本文为博主原创文章,未经博主允许不得 ...

  7. [筆記] Ubuntu Linux 使用 apt-get 指令移除軟體並清理遺留的垃圾

    This is come from    http://blog.lyhdev.com/2013/01/ubuntu-linux-apt-get.html 在 Ubuntu 下移除某個軟體套件,使用的 ...

  8. 第6次结对作业--郑锦伟&古维城

    第6次结对作业 在线英语学习平台客户端原型 1.结对成员 郑锦伟 2015034643034 古维城 2015034643033 2.原型设计工具实现-Photoshop 3.需求分析 使用NABCD ...

  9. 开发微信小程序——古龙小说阅读器

    概述 由于面试的关系接触了一下微信小程序,花了2晚上开发了一个带书签功能的古龙小说阅读器,并且已经提交审核等待发布.这篇博文记录了我的开发过程和对微信小程序的看法,供以后开发时参考,相信对其他人也有用 ...

  10. 品味ZooKeeper之纵古观今_1

    品味ZooKeeper之纵古观今 本章思维导图 这一系列主要是从整体到细节来品味Zookeeper,先从宏观来展开,介绍zookeeper诞生的原因,接着介绍整体设计框架,接着是逐个细节击破. 本章是 ...

随机推荐

  1. C# 正则表达式常用的符号和模式解析

    〇.正则表达式的基本语法符号 若只简单匹配固定字符串,则无需任何修饰符,例如:需要匹配字符串 77,则可直接写:new Regex("77"). 下边例举一下常用的符号:(知道下面 ...

  2. 【转载】SQL SERVER2008 修改数据库名相关的脚本

    -- 修改数据库名 -- 1.首先查找数据库是否占用,杀掉占用的id select spid from master.dbo.sysprocesses where dbid=db_id('ClothC ...

  3. [python] ​python-pinyin库

    python-pinyin库是一个汉字拼音转换工具,其主要功能有: 根据词组智能匹配最正确的拼音. 支持多音字. 简单的繁体支持, 注音支持. 支持多种不同拼音风格. 安装命令为:pip instal ...

  4. 推荐给Amy的书单

    目录 皮囊 推荐等级 ※ ※ ※ ※ ※ 白夜行 推荐等级 ※ ※ ※ ※ ※ 人生 推荐等级 ※ ※ ※ ※ 活着 推荐等级 ※ ※ ※ ※ 许三观卖血记 推荐等级 ※ ※ ※ ※ 皮囊 推荐等级 ...

  5. LeetCode HOT 100:验证二叉搜索树(从左右子树获取信息进行推导)

    题目:98. 验证二叉搜索树 题目描述: 给你一个二叉树,让你判断该二叉树是否是二叉搜索树.什么是二叉搜索树呢?就是某一个节点的左子树上的所有节点的值都小于当前节点,右子树上的所有节点值都大于当前节点 ...

  6. 用 Python 脚本实现电脑唤醒后自动拍照 截屏并发邮件通知

    背景 背景是这样的, 我的家里台式机常年 休眠, 并配置了 Wake On Lan (WOL) 方便远程唤醒并使用. 但是我发现, 偶尔台式机会被其他情况唤醒, 这时候我并不知道, 结果白白运行了好几 ...

  7. 第三方模块的下载与使用 requests模块 openpyxl模块

    今日内容 第三方模块下载操作 第三方模块: 别人写的魔魁啊 一般情况下都很强大 python中模块很多 如果想使用第三方模块 第一次必须先下载 后面就可以反复使用 =内置模块 下载第三方模块的方式: ...

  8. JavaScript 中 this 关键字的作用和如何改变其上下文

    一.this 关键字的作用 JavaScript 中的 this 关键字引用了所在函数正在被调用时的对象.在不同的上下文中,this 的指向会发生变化. 在全局上下文中,this 指向全局对象(在浏览 ...

  9. 推荐一款在浏览器编辑`Blazor`的`IDE`

    不知道是否有Blazor用户羡慕过React或者Vue用户,在一些组件库中,它们就提供了在当前的组件预览对于组件的实时编辑并且预览? 比如semi-design的这种 在比如codepen这种 由于B ...

  10. 看不懂打我系列------图文并茂基于CentOS Linux release 7.8.2003 Core安装并Docker化你的Node.js应用

    @图文并茂基于CentOS Linux release 7.8.2003 Core安装并Docker化你的Node.js应用 简体中文 | English 说明 本文介绍如何在CentOS Linux ...