BZOJ 5161: 最长上升子序列 状压dp+查分
好神啊 ~
打表程序:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 140000000
#define ll long long
#define mod 998244353
#define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w",stdout)
using namespace std;
int f[2][N];
int cnt[N];
ll qpow(ll x,ll y) {
ll ans=1;
while(y) {
if(y&1) {
ans=ans*x%mod;
}
x=x*x%mod;
y>>=1;
}
return ans;
}
int main() {
// setIO("input");
for(int n=1;n<=30;n+=2) {
int i,j,k,d,t,pos;
ll ans=0,fac=1;
--n;
f[0][0]=1;
for(d=i=1;i<=n;++i,d^=1) {
memset(f[d],0,sizeof(int)*(1<<i));
for(j=0;j<(1<<(i-1));++j) {
f[d][j<<1]=(f[d][j<<1]+f[d^1][j])%mod,pos=-1;
for(k=i-1;k>=0;--k) {
t=((j>>k)<<(k+1))|(1<<k)|(j&((1<<k)-1));
if(j&(1<<k)) pos=k; // 这里有一
if(pos>=0) t^=(1<<(pos+1));
f[d][t]=(f[d][t]+f[d^1][j])%mod;
}
}
}
for(i=1;i<(1<<n);++i) {
cnt[i]=cnt[i-(i&-i)]+1;
}
for(i=0;i<(1<<n);++i) {
ans=(ans+1ll*f[n&1][i]*(cnt[i]+1))%mod;
}
for(i=1;i<=n+1;++i) {
fac=fac*i%mod;
}
printf("%lld\n",ans*qpow(fac,mod-2)%mod);
}
return 0;
}
表:
#include <cstdio>
int ans[40]={
1,
499122178,
2,
915057326,
540715694,
946945688,
422867403,
451091574,
317868537,
200489273,
976705134,
705376344,
662845575,
331522185,
228644314,
262819964,
686801362,
495111839,
947040129,
414835038,
696340671,
749077581,
301075008,
314644758,
102117126,
819818153,
273498600,
267588741,
};
int main() {
int n;
scanf("%d",&n);
printf("%d\n",ans[n-1]);
return 0;
}
BZOJ 5161: 最长上升子序列 状压dp+查分的更多相关文章
- BZOJ.3591.最长上升子序列(状压DP)
BZOJ 题意:给出\(1\sim n\)的一个排列的一个最长上升子序列,求原排列可能的种类数. \(n\leq 15\). \(n\)很小,参照HDU 4352这道题,我们直接把求\(LIS\)时的 ...
- 【bzoj5161】最长上升子序列 状压dp+打表
题目描述 现在有一个长度为n的随机排列,求它的最长上升子序列长度的期望. 为了避免精度误差,你只需要输出答案模998244353的余数. 输入 输入只包含一个正整数n.N<=28 输出 输出只包 ...
- bzoj5161 最长上升子序列 状压DP(DP 套 DP) + 打表
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5161 题解 回顾一下以前用二分求 LIS 的方法:令 \(f[i]\) 表示长度为 \(i\) ...
- [BZOJ 1072] [SCOI2007] 排列perm 【状压DP】
题目链接:BZOJ 1072 这道题使用 C++ STL 的 next_permutation() 函数直接暴力就可以AC .(使用 Set 判断是否重复) 代码如下: #include <io ...
- BZOJ 3195 [Jxoi2012]奇怪的道路 | 状压DP
传送门 BZOJ 3195 题解 这是一道画风正常的状压DP题. 可以想到,\(dp[i][j][k]\)表示到第\(i\)个点.已经连了\(j\)条边,当前\([i - K, i]\)区间内的点的度 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- BZOJ 3446: [Usaco2014 Feb]Cow Decathlon( 状压dp )
水状压dp. dp(x, s) = max{ dp( x - 1, s - {h} ) } + 奖励(假如拿到的) (h∈s). 时间复杂度O(n * 2^n) ------------------- ...
- BZOJ 2734 [HNOI2012]集合选数 (状压DP、时间复杂度分析)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2734 题解 嗯早就想写的题,昨天因为某些不可告人的原因(大雾)把这题写了,今天再来写题解 ...
- BZOJ.4160.[NEERC2009]Exclusive Access 2(状压DP Dilworth定理)
BZOJ DAG中,根据\(Dilworth\)定理,有 \(最长反链=最小链覆盖\),也有 \(最长链=最小反链划分数-1\)(这个是指最短的最长链?并不是很确定=-=),即把所有点划分成最少的集合 ...
随机推荐
- nginx学习笔记2
nginx基础配置 一.nginx常用命令 nginx -s reload:在nginx已经启动的情况下重新加载配置文件(平滑重启) nginx -s reopen:重新打开日志文件 nginx -c ...
- Flink task之间的数据交换
Flink中的数据交换是围绕着下面的原则设计的: 1.数据交换的控制流(即,为了启动交换而传递的消息)是由接收者发起的,就像原始的MapReduce一样. 2.用于数据交换的数据流,即通过电缆的实际数 ...
- ant-design自定义FormItem--上传文件组件
自定义上传组件,只需要在内部的值变化之后调用props中的onChange方法就可以托管在From组件中, 此外为了保证,初始化值发生变化后组件也发生变化,需要检测initialValue 变化,这是 ...
- vue样式绑定、事件监听、表单输入绑定、响应接口
1.样式绑定 操作元素的 class 列表和内联样式是数据绑定的一个常见需求.因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可.不过,字符串拼接麻烦且易错 ...
- Python转义序列
正则表达式参考:https://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
- 【05】C#特有的ref、out参数
java和C#非常相似,它们大部分的语法是一样的,但尽管如此,也有一些地方是不同的. 为了更好地学习java或C#,有必要分清它们两者到底在哪里不同. 我们这次要来探讨C#特有的ref.out参数. ...
- MVC+Ninject+三层架构+代码生成 -- 总结(四、數據層)
1.數據層使用了SqlSugar 庫類 . 數據層使用了SqlSugar 庫類 ,有興趣的 可以學習 http://www.codeisbug.com/Doc/8/1133,個人覺得比EF 簡單,容 ...
- 05 .NET CORE 2.2 使用OCELOT -- NLog
加入NLog 按照官网的文档 https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-2 一步一步操作下来,即可设置好. ...
- android版本对应表
API Level 最初Android版本 Linux内核版本 首次发布日期 后续Android版本 28 9 Unknown 2018-07-02(Beta 3) - 27 8.1 4.10 201 ...
- mac下搭建Apache服务器环境
mac下自带了一个Apache服务环境,所以不需要另外去下载,直接配置就好了. 一.启动Apache服务 在终端下输入 sudo apachectl start , 启动Apache服务.在浏览器输入 ...