题意:求有多少个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. C# Note11:如何优雅地退出WPF应用程序

    前言 I should know how I am supposed to exit my application when the user clicks on the Exit menu item ...

  2. Flutter的Appbar

    actions → List一个 Widget 列表,代表 Toolbar 中所显示的菜单,对于常用的菜单,通常使用 IconButton 来表示:对于不常用的菜单通常使用PopupMenuButto ...

  3. flutter image_picker使用照相机

    dependencies: image_picker: ^0.4.12+1 最新的^0.5+9编译无法通过 import 'dart:io'; import 'dart:async'; import ...

  4. 动态渲染页面爬取(Python 网络爬虫) ---Selenium的使用

    Selenium 的使用 Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击.下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬.对于一些JavaS ...

  5. Hbase的作用

    实时动态增加列 多版本的意思为多个用户地址,多个用户信息,多个用户号码

  6. python之路--网络编程之socket

    一 . 网络编程 CS架构 客户端服务端架构 服务端:提供服务的 客户端:享受服务的 BS架构:浏览器和服务端 网络通信流程: 集线器:将所有连接上它的电脑全部联通起来 交换机:升级版的集线器 网卡: ...

  7. python设计模式第二十天【迭代器模式】

    1.不使用迭代器出现的问题 (1)容器承担了太多的功能,一方面提供添加和删除等功能,还需提供遍历访问功能 (2)在容器访问遍历过程中,需要保存遍历状态,当和元素的添加和删除混杂在一起时,容易引起混乱 ...

  8. WhiteHat Contest 11 : re1-100

    ELF文件,运行一下是要求输密码 die查了一下无壳 直接拖入ida 可以发现 这是它的判断函数 也就是说输入的总长度是42位第一个字符是123也就是0x7b 也就是'{'然后10位是"53 ...

  9. LODOP中预览界面查看打印机的可打区域具体值

    LODOP在打印预览的时候,如果选择的打印机是真实打印机,会发现可能会有虚线,不同打印机虚线的位置不同,这个虚线是打印机的可打区域,Lodop无法控制. 可打区域,顾名思义,就是打印机可以打印的区域, ...

  10. Ajax 调用的WCF

    支持ajax 跨域调用的WCF搭建 1.新建一个"ASP.NET空Web应用程序"项目. 2.新建一个“WCF服务(支持ajax)”. 3.修改WCFAjaxService.svc ...