Peaks ( Gym 100365H )

这题nk做法还挺正常的。。后面那个循环就很恶心了

考虑 dp[i][j] 表示长度为i的排列,恰好有k个峰的方案数量。

然后转移就是把 i 插入 i-1 的排列。

i显然是i-1的排列里面最大的数,然后插入就只有两种情况:

  1. 插入在峰的左右,由于峰不可能相邻,所以可以插入在 2j 个位置
  2. 插入在爬山的时候,那么峰的数量+1

$ dp[i][j] = 2j\times dp[i-1][j] + ( i - 2(j - 1) )dp[i-1][j-1] $

其实,由于 j 只有 30 , 可以矩阵快速幂,大概是 $ k^3( mod + log n ) $

但是发现把矩阵写出来可以有这么个神仙结论 $ f( n , k ) = f( n + 56882 , k ) (\mod 239 ) $

暴力暴力

别忘了这题开文件

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<bitset>
using namespace std;
#define int long long
typedef long long ll;
#define MAXN 57000
#define pb push_back
#define pii pair<int,int>
#define fi first
#define se second
#define mp make_pair
#define inf 0x3f3f3f3f
#define cmx( a , b ) a = max( a , b )
#define cmn( a , b ) a = min( a , b )
#define P 239
void read( signed& x ) {
scanf("%d",&x);
}
void read( ll& x ) {
scanf("%lld",&x);
}
int n , k;
int dp[MAXN][31];
signed main() {
freopen("peaks.in","r",stdin);
freopen("peaks.out","w",stdout);
cin >> n >> k;
n %= 56882;
dp[0][0] = 1;
for( int i = 1 ; i <= n ; ++ i )
for( int j = 1 ; j <= k ; ++ j )
dp[i][j] = ( 2 * j * dp[i - 1][j] % P + ( i - 2 * ( j - 1 ) + P ) % P * dp[i - 1][j - 1] % P ) % P;
printf("%d\n",dp[n][k]);
}
/*
* Things you should pay attention to
* inf is big enough?
* out of bounds?
* long long ?
*/

最新文章

  1. apache和tomcat有什么不同,为什么要整合apache 和tomcat
  2. Java EE之一个表单两个按钮响应不同界面(登录与注册)
  3. log4j2配置详解
  4. 关于mysql数据库行级锁的使用(一)
  5. 锋利的jQuery-3--.css()获取和设置元素的数字属性
  6. Struts2的类型转换
  7. 关于size_t与size_type
  8. NPOI操作EXCEL--设置密码及设置只读
  9. poj1504--求两个数的反转数的和的反转数
  10. ubuntu下使用命令行创建一个android项目
  11. GPRS的工作原理、主要特点
  12. uWSGI、WSGI、uwsgi是什么?
  13. Yii2 console执行定时脚本
  14. puppeteer 填充基础表单
  15. 面向面试编程代码片段之GC
  16. delphi frame 添加 create onshow 事件
  17. intoj
  18. 吴恩达机器学习CS229课程笔记学习
  19. Linux中程序开机自启
  20. absolute之后居中宽度自适应

热门文章

  1. 初识HTML01
  2. 分割迭代器Spliterator源码文档翻译
  3. Beta实际开发与初始计划的比较
  4. (三)、Docker常用基础命令
  5. 机器人的运动范围 牛客网 剑指Offer
  6. Django 实现分页功能(django 2.2.7 python 3.7.5 )
  7. bootstrap 4 学习笔记
  8. 谷歌chrome多个相同用户登陆同一个机器多开配置
  9. LOTO实践【干货】电压比较器的快速应用
  10. Code Runner for VS Code,下载量突破 3000 万!