BZOJ1996 [Hnoi2010] 合唱队
2024-08-25 20:37:32
Description
Input
Output
Sample Input
4
1701 1702 1703 1704
1701 1702 1703 1704
Sample Output
8
HINT
Solution
令$f_{i,j}$表示区间$[j,i+j]$在限定最后一个放$i$的情况下的方案数(之所以不是$[j,i]$,是因为那样不好滚动),$g_{i,j}$是限定最后一个放$i+j$的方案数。
转移时考虑上次放的是哪一个就可以了。要特殊处理$i=1$的情况。
代码:
#include <algorithm>
#include <cstdio>
const int N = 1005;
const int mod = 19650827;
int H[N], _f[2][N], _g[2][N];
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i) scanf("%d", &H[i]);
int *f = _f[0], *g = _g[0], *ff = _f[1], *gg = _g[1];
for (int i = 0; i < n; ++i) f[i] = 1;
for (int i = 1; i < n; ++i) {
std::swap(f, ff);
std::swap(g, gg);
for (int j = 0; i + j < n; ++j) {
f[j] = g[j] = 0;
if (H[j] < H[j + 1]) f[j] += ff[j + 1];
if (H[j] < H[j + i]) f[j] += gg[j + 1];
if (H[j + i] > H[j]) g[j] += ff[j];
if (H[j + i] > H[j + i - 1]) g[j] += gg[j];
f[j] %= mod;
g[j] %= mod;
//printf("%d %d ", f[j], g[j]);
}
//printf("\n");
}
printf("%d\n", (f[0] + g[0]) % mod);
return 0;
}
最新文章
- LinqToDB 源码分析——轻谈Linq查询
- Nginx - Windows下作为服务启动
- 老生长谈的$.extend()方法
- php curl 例子
- c++的转换
- RFID应用范围
- Navicat for mysql 破解
- select、poll、poll的比较(转)
- PlayFramework 1.2.x 在Controller 中识别JSON提交
- HDU 3466
- C语言学习--可变数组
- java07循环结构
- Microsoft OLE DB Provider for SQL Server 错误 &#39;80040e21&#39;
- 读取webconfig里面的appSetting和connectionString
- javascript集合求交集
- Angular TypeScript开发环境集成jQuery扩展插件
- [BlueZ] 1、Download install and use the BlueZ and hcitool on PI 3B+
- 基于centos6.5安装部署mongdb3.6
- PA教材提纲 TAW12-1
- Nginx配置跨域支持功能