华师一附中OI组

标题: 波动 [打印本页]

作者: admin    时间: 2021-10-14 14:53
标题: 波动
【问题描述】
        一个长度为n的序列{a_i}的波动值定义为∑_(i=1)^(n-1)▒〖|a_(i-1)-a_i |〗。
        你需要求出波动值为m的1-n的排列个数模〖10〗^9+7的余数。
【输入】
输入文件wave.in。
        第一行两个数n,m。
【输出】
输出文件wave.out。
一行一个数表示答案。
【输入输出样例】
wave.in        wave.out
4 5        12
【数据说明】
30%:n≤10,m≤40
100%:n≤50

作者: admin    时间: 2021-10-14 14:53
(zjoi2012)
        考虑一种排列的生成方式,每次加入一个数然后和前面的数交换或插入一个位置,再计算权值。
        因为是绝对值,所以考虑从小往大加,但是发现在交换或插入后与前面序列的状态有关,不好转移,而n又较小,考虑添加状态方便转移。
        在加入一个元素后我们决策其相邻的两个元素与其的大小关系,此时就加上它对答案的影响,这样一来,我们相当于将当前的序列割成了几段,后面的数只能插入段与段的间隙里,又考虑到两端间隙的特殊性,令fi,j,k,s表示考虑完前面i个数、有j个间隔、两端的间隔有k个、波动值为s的方案数,转移参(zi)见(xing)标(nao)称(bu)。
        时间复杂度O(N4)。
        空间复杂度O(N3),用滚动数组。





欢迎光临 华师一附中OI组 (http://hsyit.cn/) Powered by Discuz! X3.2