wave
题意:求有多少个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的更多相关文章
- RIFF和WAVE音频文件格式
RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...
- IEEE 802.11p (WAVE,Wireless Access in the Vehicular Environment)
IEEE 802.11p(又称WAVE,Wireless Access in the Vehicular Environment)是一个由IEEE 802.11标准扩充的通讯协定.这个通讯协定主要用在 ...
- Wave - 花たん 音乐
Wave 歌手:花たん 所属专辑:Flower 間違えて宇宙終わって(宇宙因为一个错误而终结了) 青信号はいつも通り(通行的灯号一如往常的) 飛んでまた止まって(又再停止传播) また 飛びそうだ(然后 ...
- Web 播放声音(AMR 、WAVE)
最近甚是苦闷,属于边学边做,跳进了很多坑,别提有多惨了,不过结果还是不错滴,纵观前后,一句话足以概括 “痛并快乐着” ~~~ ok,我少说废话,下面来总结下 Web 播放声音一些注意事项. 说到 We ...
- 多媒体(2):WAVE文件格式分析
目录 多媒体(1):MCI接口编程 多媒体(2):WAVE文件格式分析 多媒体(3):基于WindowsAPI的视频捕捉卡操作 多媒体(4):JPEG图像压缩编码 多媒体(2):WAVE文件格式分析
- UVa 488 - Triangle Wave
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...
- modelsim 中 WAVE窗口中能不能只显示变量名,而不显示路径
可以的,在wave窗口左下角有一个黑色的logo,你点击它就可以省电路径,只显示port名称,再点击就切换回来了,如图红色圈圈标记的logo,你可以试试!
- C# 获取wave文件信息【转】
public class WaveHelper { /// <summary> /// 数据流 /// </summary> private Stream m_WaveData ...
- 【转载】PMC/PEC Boundary Conditions and Plane Wave Simulation
原文链接 PMC/PEC Boundary Conditions and Plane Wave Simulation (FDTD) OptiFDTD now has options to use Pe ...
- wave文件(*.wav)格式、PCM数据格式
1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采 ...
随机推荐
- java随笔4 java中接参整形转字符串
通过+‘’来实现
- java中级——集合框架【3】-HashSet
HashSet package cn.jse.hashset; import java.util.HashSet; public class TestCollection { public stati ...
- 1、通过eureka创建注册中心
第一个demo(用户需要调用电影服务) 1.创建项目 new starter project 勾选上Eureka Server 2.编写application.yml #配置端口 server: po ...
- dashboard使用与访问
#dashboard的github地址 https://github.com/kubernetes/dashboard #下载 wget https://raw.githubusercontent.c ...
- springboot swagger2 泛型踩坑记
最近使用一些工具需要和swagger打通,swagger的格式总是不对. 后来查了一下:哈哈. https://blog.csdn.net/hupingjin/article/details/8299 ...
- bootstrap簡介
bootstarp是最受歡迎的前端開發框架,可以開發數適用pc.平板電腦和手機的web應用,是基於html.css和javascript.只要學會bootstarp,就代表具有web的開發的中級水準.
- Vue之变量、数据绑定、事件绑定使用举例
vue1.html <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/19 ...
- JQuery Datatable用法
原文出处:http://sgyyz.blog.51cto.com/5069360/1408251 目标: 使用jQuery Datatable构造数据列表,并且增加或者隐藏相应的列,已达到数据显示要求 ...
- Modification Default Identity Table
Step 1. Open IdentityModel.cs to add following code. protected override void OnModelCreating(DbModel ...
- 51nod 1636
1636 教育改革 我看过题解了还下了数据,表示很惭愧不想说什么,但还是说两句吧 sol: 因为差值很小只有100,所以对数组下标存的是(选择的数值和左端点的差值) f[i][j][k]即为第i天选了 ...