[luogu4484]最长上升子序列
2024-10-19 15:13:35
标算是状压dp+打表,前者时间复杂度为$o(n^{2}2^{n})$,并通过打表做到$o(1)$
参考loj2265中关于杨表的相关知识,不难发现答案即$\frac{\sum_{a\vdash n}a_{1}f_{a}^{2}}{n!}$
记$P(n)$为$a\vdash n$的方案数,后者$f_{a}$可以$o(n)$计算,总复杂度即$o(nP(n))$
不难发现$P(n)$即为A000041,有$P(28)=3718$(甚至$P(60)\le 10^{6}$),显然可以通过
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 30
4 #define mod 998244353
5 #define ll long long
6 vector<int>v;
7 int n,ans,inv[N];
8 void calc(int k,int lst){
9 if (!k){
10 int s=1;
11 for(int i=0;i<v.size();i++)
12 for(int j=1;j<=v[i];j++){
13 int tot=v[i]-j;
14 for(int k=i;k<v.size();k++)
15 if (j<=v[k])tot++;
16 s=(ll)s*inv[tot]%mod;
17 }
18 for(int i=1;i<=n;i++)s=(ll)s*i%mod;
19 s=(ll)v[0]*s%mod*s%mod;
20 ans=(ans+s)%mod;
21 return;
22 }
23 for(int i=min(k,lst);i;i--){
24 v.push_back(i);
25 calc(k-i,i);
26 v.pop_back();
27 }
28 }
29 int main(){
30 inv[0]=inv[1]=1;
31 for(int i=2;i<N;i++)inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
32 scanf("%d",&n);
33 calc(n,n);
34 for(int i=1;i<=n;i++)ans=(ll)ans*inv[i]%mod;
35 printf("%d\n",ans);
36 return 0;
37 }
最新文章
- java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决(碰到问题,转载答案)
- 数据库Mark.2
- 启动tomcat后struts框架报异常严重: Exception starting filter struts2 Unable to load configuration.
- java之抽象类
- linux: centos设置ip以及连接外网
- html5异步上传图片显示上传文件进度条
- oc 获取当前时间
- SQL Server 索引的自动维护 <;第十三篇>;
- ffmpeg合并多个视频
- label+input实现开关切换效果
- 部署Java和Tomcat
- 深入浅出JAVA线程池使用原理2
- Transparency Sort Mode
- Source Insight 4 中文乱码的解决办法(source insight 3.5 及以下版本就到其他地方看看吧)
- tensorflow ValueError: Cannot feed value of shape (5000,) for Tensor &#39;output:0&#39;, which has shape &#39;(?, 10)&#39;
- Gobelieve 架构(转载)
- idea 配置多个jdk
- Java Json API:Gson使用简单入门
- 以太坊系列之十一: 零起步使用remix开发智能合约
- [Python Study Notes]七彩散点图绘制