华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1758|回复: 1
打印 上一主题 下一主题

波动

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2021-10-14 14:53:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
【问题描述】
        一个长度为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
回复

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-26 14:17 , Processed in 0.100477 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表