题目描述 现在有一个长度为n的随机排列,求它的最长上升子序列长度的期望. 为了避免精度误差,你只需要输出答案模998244353的余数. 输入 输入只包含一个正整数n.N<=28 输出 输出只包含一个非负整数,表示答案模998244353的余数. 可以证明,答案一定为有理数,设其为a/b(a.b为互质的整数),你输出的整数为x, 则你需要保证0≤x<998244353且a与bx模998244353同余. 样例输入 2 样例输出 499122178 题解 状压dp+打表 套路:对于排列问题,从左…
BZOJ 题意:给出\(1\sim n\)的一个排列的一个最长上升子序列,求原排列可能的种类数. \(n\leq 15\). \(n\)很小,参照HDU 4352这道题,我们直接把求\(LIS\)时的状态存下来做DP数组的状态. 状态就是那个单调递增的单调栈.每个数会有三种可能:没入过栈,现在在栈中,之前在栈中但是被替换掉了. 所以用一个\(n\)位三进制数表示单调栈的状态\(s\).然后枚举状态\(s\),再枚举一个没出现过的数,很好转移. 转移时注意\(LIS\)长度不能超过\(k\),以及…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5161 题解 回顾一下以前用二分求 LIS 的方法:令 \(f[i]\) 表示长度为 \(i\) 的 LIS 的最后一位的最小值.可发现不管目前 DP 到了哪儿,这个东西永远是递增的. 关于 LIS 的题目的大都可以维护一些和这个东西有关的状态,所以我们考虑状压这个数组.因为这个数组中每一位都不重复,所以可以用 \(01\) 来状压成一个二进制数. 由于我们在转移状态的时候,不关系新来的数到底…
好神啊 ~ 打表程序: #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"…
刘汝佳蓝书上的题,标程做法是从终点倒着$spfa$,我是二分答案正着$spfa$判断可不可行.效果是一样的. [注意]多组数据建边一定要清零啊QAQ!!! #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; int S, T, p; struct Node { int v, nex; Node ( , ) : v ( v ), n…
Luogu 3402 最长公共子序列(二分,最长递增子序列) Description 经过长时间的摸索和练习,DJL终于学会了怎么求LCS.Johann感觉DJL孺子可教,就给他布置了一个课后作业: 给定两个长度分别为n和m的序列,序列中的每个元素都是正整数.保证每个序列中的各个元素互不相同.求这两个序列的最长公共子序列的长度. DJL最讨厌重复劳动,所以不想做那些做过的题.于是他找你来帮他做作业. Input 第一行两个整数n和m,表示两个数列的长度. 第二行一行n个整数\[a_1,a_2,-…
51nod 1376 最长上升子序列的数量 题解 我们设lis[i]为以位置i结尾的最长上升子序列长度,dp[i]为以位置i结尾的最长上升子序列数量. 显然,dp[i]要从前面的一些位置(设为位置j)的dp转移过来. j要满足下面的条件: j < i a[j] < a[i] lis[j] = lis[i] - 1 dp[i]即为所有满足上述条件的dp[j]之和. 如果我们正常从左到右处理序列,第一条显然可以直接满足(因为大于i的位置还都没处理过). 为了满足第三条,我们可以把lis相同的值放在…
Great! Your new software is almost finished! The only thing left to do is archiving all your n resource files into a big one. Wait a minute… you realized that it isn’t as easy as you thought. Think about the virus killers. They’ll find your software…
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本是货郎担问题(TSP),状压中挺常出现的问题 f[s][i]表示状态s下到第i个有宝藏的地方,是否能拿到所有s中的宝藏 当然最后还要考虑dis[id[i]][1]是否大于s状态下的宝藏数,取较小值就是答案了 跑了48ms,优化一下应该可以更快.. #include<stdio.h> #includ…
1097: [POI2007]旅游景点atr Time Limit: 30 Sec  Memory Limit: 357 MBSubmit: 1531  Solved: 352[Submit][Status][Discuss] Description FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺序不是完全随意的,比如说FGD不希望在刚吃过一顿大餐之后立刻去下一个城市登山,而是希望去另外什么地方喝下午茶.幸运的是,FGD…