首页 > 其他分享 >题解 ARC104F

题解 ARC104F

时间:2023-08-03 10:01:03浏览次数:42  
标签:偏序 ARC104F int 题解 兄弟 MAX SIZE

前言

在这里首先感谢一下题解区的 FZzzz,本人的题解思路主要是基于他并给出了自己的理解。

如非特殊说明,本题解中的数学符号原则上与题目中一致。

题目分析

需要转化的喵喵题。

我们需要把原问题转化成一个图论计数问题,然后剩下的就很好办了。

好,首先让我们修改一下题目的要求,将不存在的情况设为 \(p_i = 0\),这样就可以使得我们的 \(p_i\) 的值只可能取到自然数集合中连续的一段 \([0,n-1]\) 了。

考虑连边 \((i,p_i)\),我们首先能得到一个十分显然的性质,就是最终连边连出来的图必定没有环,证明显然,考虑偏序关系不允许出现环即可。

但是这个性质不是很强,我们还可以进一步得到相比更强的性质,就是连出来的图必定是一棵树,这个证明考虑 \(p_i\) 的值只会取到 \([0,i-1]\) 而已,又因为不会出现环,故现在此时连出来的是一棵树,并且是以 \(0\) 为根节点的树。

现在让我们观察一下每个节点上 \(h_i\) 的值,不难发现兄弟之间左方的兄弟的 \(h\) 值 \(\le\) 右方的兄弟的 \(h\) 值,且当前节点的 \(h\) 值一定大于他的儿子们。证明显然,考虑如果左方的兄弟大于自己,则自己会被左方的兄弟支配,变成他的儿子,故左右兄弟之间是 \(\le\),考虑如果自己的儿子大于等于自己,那么它必定会成为自己的兄弟甚至是祖先的兄弟,故父亲儿子之间是 \(\gt\)。

让我们定义 \(a_i\) 为 \(i\) 左边第一个的兄弟,让 \(b_i\) 为 \(i\) 最右边的儿子,设 \(c_i=\max\{c_{a_i} , c_{b_i} + 1\}\),则此时 \(c\) 必定是 \(h\) 的构造方案之一(证明考虑兄弟之间的偏序关系和父亲儿子之间的偏序关系),并且对于任意的 \(h\) 我们都有 \(h_i \ge c_i\),于是可以比较 \(c_i\) 与 \(x_i\) 就可以看出 \(p\) 是否合法。

最后,设 \(dp_{i,j,k}\) 为区间 \([i-1,j]\) 形成了一棵树,且 \(c_{b_{i-1}} \le k\) 时,\([i,j]\) 的方案数,时间复杂度 \(\mathcal O(n^4)\)。

代码实现

这里只给出了代码的关键部分,其余部分还恳请读者自行实现。

int n;

int X[MAX_SIZE];
int dp[MAX_SIZE][MAX_SIZE][MAX_SIZE];

void main() {
    n = read();
    for (int i = 1; i <= n; i++) {
        X[i] = read();
    }
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= n; j++) {
            dp[i + 1][i][j] = 1;
        }
    }
    for (int i = n; i >= 1; --i) {
        for (int j = i; j <= n; j++) {
            for (int k = 1; k <= n; k++) {
                for (int p = i; p <= j; p++) {
                    int q = min(k, X[p]);
                    dp[i][j][k] =
                        mt.add(dp[i][j][k],
                               mt.mul(dp[i][p - 1][q], dp[p + 1][j][q - 1]));
                }
            }
        }
    }
    printf("%lld\n", dp[1][n][n]);
    return void();
}

标签:偏序,ARC104F,int,题解,兄弟,MAX,SIZE
From: https://www.cnblogs.com/larry76/p/17602490.html

相关文章

  • 题解 AGC054D
    前言因为本人尚菜,所以本篇文章没有什么数学符号,请大家放心食用。题目分析先吐槽一嘴,这个o表示(),这个x表示)(,十分形象。好,我们先观察原序列,容易得出第一条性质:ox的加入不会让我们不合法的序列变合法,相反,它会让我们合法的序列变不合法。于是可以得出,无论如何,只要我们......
  • 题解 P9406【[POI2020-2021R3] Nawiasowania】
    一个显然的思路是:在排列\(p\)的括号串合法的基础上,使得左括号在原括号串中尽量靠左,这样答案更有可能合法。于是我们求出这个原括号尽量靠左的括号串(下文称为“最优括号串”),然后check合法性即可。下文中\(s\)是排列\(p\)的括号串。当\(n=2\)时,唯一的填法是令\(s_1\get......
  • 题解 P9326
    前言数学符号约定\(n\):任意正整数。\(\#\):从未出现过的小写字母。\(\Sigma\):字符集,这里指小写字母集合。\(S\):最终答案的字符矩阵。其余符号同题目翻译中所写。如非特殊说明,将会按照上述约定书写符号。题目大意构造一个\(N\timesM\)的小写字母矩阵,使得其中有\(R\)行......
  • 题解
    大力相应teacher要求。正难则反,考虑求不合法的三元组的数量。对于一个不合法的三元组,可以发现条件等价于三元组中有一个点出度为2。记\(m\)次操作后每个点出度为\(d_i\),答案就是\(\dbinom{n}{3}-\sum\limits_{i=1}^n\dbinom{d_i}{2}\)。那么怎么统计?回忆\(\mathcal{O}(......
  • Lua script attempted to access a non local key in a cluster node 问题解决
    一、问题描述最近优化公司需要对不同的业务系统的缓存工具提供一个标准化的解决方案。各个业务系统将缓存数据通过map结构进行存储,然后在缓存系统中将这些map获取出来,然后保存在redis数据库中。技术经理想到的最好解决方案是将map集合直接存储在redis的hash表中。但是要求对hash......
  • CF1468N 题解
    洛谷链接&CF链接题目简述共有\(T\)组数据,对于每组数据:有三个桶,五种垃圾,每个桶有固定的容量。前三种垃圾分别放入三种桶中,第四种垃圾可以放进\(1,3\)桶中,第五种垃圾可以放进\(2,3\)桶中。问题:对于给定的桶容量和垃圾量,请问垃圾是否可以全部放入桶中?思路简单贪心题。......
  • CF479C 题解
    洛谷链接&CF链接题目简述一个人想要安排期末考试的时间。有\(n\)场考试,每场考试有两个时间\(x_i,y_i\),一个是老师规定的时间,另外一个是他与老师商量好的考试时间。如果错过了,那就只能按照原来的考试时间考试。规定:只能按照原定考试的日期顺序进行考试的情况下,输出考完试......
  • 饭票 题解
    1.题意简述某天小\(x\)去食堂吃饭,手里有\(n\)种饭票,面值分别为\(A_1~A_n\),数量分别为\(C_1~C_n\)请你计算小\(x\)的饭票能组成多少在\([1,m]\)区间内的面值。2.样例解释3101242118样例中,我们有两张一元,一张两元和一张四元,可以凑出\(1\)到\(8\)元中所......
  • 【题解】Luogu[P2296] [NOIP2014 提高组] 寻找道路
    Link很简单的一道图论题。要在一个有向图上找一条\(s\)到\(t\)的最短路,要求这条路径上的所有点都满足:该点的所有出边所连点都能到达终点\(t\)。看上去很乱,我们简单分解一下,先在所有点中找到与终点有路径的点集\(A\)进行标记,再再所有点中找到其所有出边所连点都被打上标......
  • 国标GB28181视频平台LntonGBS国标平台调用快照接口,未能正常返回快照图片的问题解决方
    LntonGBS国标视频云服务支持设备/平台通过国标GB28181协议注册接入,可实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。LntonGBS平台便捷、丰富、灵活、可拓展的视频能力,已经使其成为当前安防市场的主流需求视频平台,并且已经在大量的项目中落地......