题意:求有多少个1~n的排列满足:

其中n<=50

解:

贼神的一道题。

如何处理绝对值?

从小到大按顺序放数,可以拆掉绝对值。

如果你放的旁边有个空隙,那么贡献-i,如果旁边有个数,贡献+i

然后你设的是f[i][j][k][s]表示前i个数,有j+1段数(j个间隔),两端点状态为k(0~2分别表示都没有放数,放了一个,放了两个),目前贡献为s的方案数。

所以要求的就是f[n][0][2][m]

考虑转移:我们可以把i放在某个间隔里,三种情况。还可以放在两端,4种情况。

 #include <cstdio>
#include <algorithm> typedef long long LL;
const int N = , MO = 1e9 + , D = ; int n;
LL f[][N][][]; inline void add(LL &a, const LL &b) {
a += b;
while(a >= MO) {
a -= MO;
}
while(a < ) {
a += MO;
}
return;
} int main() { freopen("wave.in", "r", stdin);
freopen("wave.out", "w", stdout);
int m;
scanf("%d%d", &n, &m); LL ans = ; f[][][][D - ] = ; // 1 in mid
f[][][][D - ] = ; // 1 in edge
for(int i = ; i < n; i++) {
for(int j = ; j <= (n + ) >> ; j++) {
for(int k = ; k < ; k++) {
for(int s = ; s < ; s++) {
if(!f[i & ][j][k][s]) {
continue;
}
LL t = f[i & ][j][k][s];
//printf("%d %d %d %d = %lld\n", i, j, k, s - D, t);
// f[i][j][k][s] -> ?
if(k < ) { // i+1 in edge
add(f[(i + ) & ][j][k + ][s + i + ], t * ( - k)); // merge
add(f[(i + ) & ][j][k][s], t * ( - k)); // edge
add(f[(i + ) & ][j + ][k + ][s - i - ], t * ( - k)); // end
if(j + ( - k) + i < n - ) {
add(f[(i + ) & ][j + ][k][s - ((i + ) << )], t * ( - k)); // split
//printf("%d %d %d %d %d \n", i + 1, j + 1, k, s - ((i + 1) << 1) - D, f[i + 1][j + 1][k][s - ((i + 1) << 1)]);
}
}
// i+1 in mid
if(j) {
add(f[(i + ) & ][j][k][s], t * j * ); // edge
add(f[(i + ) & ][j - ][k][s + ((i + ) << )], t * j); // merge
if(j + ( - k) + i < n - ) { // split
add(f[(i + ) & ][j + ][k][s - ((i + ) << )], t * j);
}
}
f[i & ][j][k][s] = ;
}
}
}
} printf("%lld", f[n & ][][][m + D]);
return ;
}

AC代码

空间不够,要滚动。然后每次要清零。当前价值可能为负所以要加一个偏移量。

相同的套路还有相邻的两个数贡献为max/min,几乎一模一样。

wave的更多相关文章

  1. RIFF和WAVE音频文件格式

    RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...

  2. IEEE 802.11p (WAVE,Wireless Access in the Vehicular Environment)

    IEEE 802.11p(又称WAVE,Wireless Access in the Vehicular Environment)是一个由IEEE 802.11标准扩充的通讯协定.这个通讯协定主要用在 ...

  3. Wave - 花たん 音乐

    Wave 歌手:花たん 所属专辑:Flower 間違えて宇宙終わって(宇宙因为一个错误而终结了) 青信号はいつも通り(通行的灯号一如往常的) 飛んでまた止まって(又再停止传播) また 飛びそうだ(然后 ...

  4. Web 播放声音(AMR 、WAVE)

    最近甚是苦闷,属于边学边做,跳进了很多坑,别提有多惨了,不过结果还是不错滴,纵观前后,一句话足以概括 “痛并快乐着” ~~~ ok,我少说废话,下面来总结下 Web 播放声音一些注意事项. 说到 We ...

  5. 多媒体(2):WAVE文件格式分析

    目录 多媒体(1):MCI接口编程 多媒体(2):WAVE文件格式分析 多媒体(3):基于WindowsAPI的视频捕捉卡操作 多媒体(4):JPEG图像压缩编码 多媒体(2):WAVE文件格式分析

  6. UVa 488 - Triangle Wave

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...

  7. modelsim 中 WAVE窗口中能不能只显示变量名,而不显示路径

    可以的,在wave窗口左下角有一个黑色的logo,你点击它就可以省电路径,只显示port名称,再点击就切换回来了,如图红色圈圈标记的logo,你可以试试!

  8. C# 获取wave文件信息【转】

    public class WaveHelper { /// <summary> /// 数据流 /// </summary> private Stream m_WaveData ...

  9. 【转载】PMC/PEC Boundary Conditions and Plane Wave Simulation

    原文链接 PMC/PEC Boundary Conditions and Plane Wave Simulation (FDTD) OptiFDTD now has options to use Pe ...

  10. wave文件(*.wav)格式、PCM数据格式

    1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采 ...

随机推荐

  1. Mysql如何快速插入100万条记录?

    1.java程序拼接insert带多个value,使一次提交多个值. 2.插入数据之前先删除索引(注意主键不能删除),然后插入数据,最后重建索引 3.可以设置手动commit,用来提高效率 4.使用批 ...

  2. Django--CRM--一级, 二级 菜单表

    一. 一级菜单表 1. 首先要修改权限表的字段, 在权限表下面加上icon和 is_menu 的字段 2. 展示结果 # 我们既然想要动态生成一级菜单,那么就需要从数据库中拿出当前登录的用户的菜单表是 ...

  3. 记一次阿里云服务器被用作DDOS攻击肉鸡

    事件描述:阿里云报警 ——检测该异常事件意味着您服务器上开启了"Chargen/DNS/NTP/SNMP/SSDP"这些UDP端口服务,黑客通过向该ECS发送伪造源IP和源端口的恶 ...

  4. supervisor /var/run/supervisor/supervisor.sock not found 或者/tmp/supervisor.sock not found

    刚按装完supervisor,这时候用supervisorctr -c supervisor.conf 会报错: /var/run/supervisor/supervisor.sock not fou ...

  5. python requests上传文件 tornado 接收文件

    requests 上传文件 import requests def images(): url = 'http://127.0.0.1:8889/upload/image' files = {'fil ...

  6. mybatis-spring-1.2.2.jar下载地址

    http://www.java2s.com/Code/Jar/m/Downloadmybatisspring120jar.htm

  7. LODOP 获取打印设计代码不带INIT初始化语句

    前面的博文生成JS代码模版和文档式模版,生成的是带初始化语句的模版,如果想要打印多个,可以循环多个任务,什么是一个任务,可查看本博客相关博文:Lodop打印语句最基本结构介绍(什么是一个任务)一个任务 ...

  8. LodopFuncs.js和CLodopFuncs.js区别和联系

    所在位置:LodopFuncs.js可以在官网下载中心综合版里下载到.CLodopfuncs.js在C-Lodop服务缓存中,C-Lodop启动的时候才能访问到. 需不需要下载放置到项目里:(客户端本 ...

  9. Xamarin 简化的Android密钥库签名

    安装 开始使用这个新工具不容易.在Visual Studio 2017(即将推出VS 2015),只需转到工具 - >扩展和更新,并搜索“密钥库”来查找扩展名. 下载后,只需重新启动Visual ...

  10. Kafka消费时报错:Producer connection to xxx:9092 unsuccessful

    使用kafka消费数据时报Producer错误,具体错误如下: kafka.producer.SyncProducer:103 Producer connection to xxx:9092 unsu ...