Solution\text{Solution}Solution

神奇题目。
首先可以强制所有的数递增,最后的答案乘一个 n!n!n! 即可。
设 dpi,jdp_{i,j}dpi,j​ 表示在 [1,j][1,j][1,j] 的值域选了 iii 个数的答案,不难写出 dp 转移:
dpi,j=dpi−1,j−1×j+dpi,j−1dp_{i,j}=dp_{i-1,j-1}\times j+dp_{i,j-1}dpi,j​=dpi−1,j−1​×j+dpi,j−1​
答案就是 dpn,kdp_{n,k}dpn,k​。
直接暴力做是 O(nk)O(nk)O(nk) 的,无法通过。

考虑使用拉格朗日插值优化。
既然要用拉格朗日插值,关键就在与证明 dpn,kdp_{n,k}dpn,k​ 是一个以 kkk 为自变量的 fnf_nfn​ 次多项式。

首先又一个较为显然的结论,若 g(x)g(x)g(x) 是一个 kkk 次多项式,那么它的差分 g(x)−g(x−1)g(x)-g(x-1)g(x)−g(x−1) 就是一个 k−1k-1k−1 次多项式。
那么回到刚才的转移式,它也可以写成:
dpi,j−dpi,j−1=dpi−1,j−1×jdp_{i,j}-dp_{i,j-1}=dp_{i-1,j-1}\times jdpi,j​−dpi,j−1​=dpi−1,j−1​×j
考虑多项式次数,也就是:
fn−1=fn−1+1f_n-1=f_{n-1}+1fn​−1=fn−1​+1
也就是说 fnf_nfn​ 是一个公差为二的等差数列。
又因为有:dpn,0=0,f0=0dp_{n,0}=0,f_0=0dpn,0​=0,f0​=0,所以就能得到:
fn=2nf_n=2nfn​=2n
O(n2)O(n^2)O(n2) 暴力求出前 nnn 项插值即可,连续值域插值可以前缀和优化到线性。
总复杂度 O(n2)O(n^2)O(n2)。

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}const int N=2050;
int mod;
ll n,m;
inline ll ksm(ll x,ll k){ll res(1);while(k){if(k&1) res=x*res%mod;x=x*x%mod;k>>=1;}return res;
}
ll x[N],y[N];
ll jc[N],suf[N],pre[N],ni[N];
ll lagrange(int n,ll *y,ll k){//consecutivek%=mod;jc[0]=1;for(int i=1;i<=n;i++) jc[i]=jc[i-1]*i%mod;ni[n]=ksm(jc[n],mod-2);for(int i=n-1;i>=0;i--) ni[i]=ni[i+1]*(i+1)%mod;pre[0]=1;for(int i=1;i<=n;i++) pre[i]=pre[i-1]*(k-i)%mod;suf[n+1]=1;for(int i=n;i>=1;i--) suf[i]=suf[i+1]*(k-i)%mod;ll res(0);for(int i=1;i<=n;i++){ll add=y[i]*pre[i-1]%mod*suf[i+1]%mod*ni[i-1]%mod*ni[n-i]%mod;if((n-i)&1) add=mod-add;(res+=add)%=mod;}return res;
}
ll dp[505][1505];
signed main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifm=read();n=read();mod=read();for(int i=0;i<=2*n+1;i++) dp[0][i]=1;for(int i=1;i<=n;i++){for(int j=1;j<=n*2+1;j++){dp[i][j]=(dp[i][j-1]+dp[i-1][j-1]*j)%mod;}}for(int i=1;i<=2*n+1;i++){y[i]=dp[n][i];}ll res=lagrange(2*n+1,y,m);printf("%lld\n",res*jc[n]%mod);return 0;
}
/*
*/

洛谷P4463:calc(dp、拉格朗日插值)相关推荐

  1. 【BZOJ】2655: calc 动态规划+拉格朗日插值

    [题意]一个序列$a_1,...,a_n$合法当且仅当它们都是[1,A]中的数字且互不相同,一个序列的价值定义为数字的乘积,求所有序列的价值和.n<=500,A<=10^9,n+1< ...

  2. bzoj 4559 [JLoi2016]成绩比较 —— DP+拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559 看了看拉格朗日插值:http://www.cnblogs.com/ECJTUACM-8 ...

  3. F. Cowmpany Cowmpensation(树形dp + 拉格朗日插值)

    F. Cowmpany Cowmpensation 首先一般dp推导dp[i][j]=∏u∈soni∑k=1jdp[v][k]dp[i][j] = \prod\limits_{u \in son_i} ...

  4. 洛谷 P4463 [集训队互测 2012] calc(拉格朗日插值优化DP)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P4463 Prob ...

  5. 洛谷1846 游戏 dp

    题目链接 题意: 给定两个正整数数列,你要用它们来做一个游戏:你需要对数列进行若干次操作,每一次操作,应选择两个正整数K1和K2 ,并删除第一个数列的最后K1个数,计算出它们的和S1:删除第二个数列的 ...

  6. 洛谷P3146 区间dp做题笔记

    不是题解,不是题解,不是题解,纯属个人笔记,不知所言. 传送门:P3146 问:什么时候才能写的一手漂亮的dp? 答:夜深人静之时,魂归故里之日. 此题是一道基础的区间dp的题,看完题解犹豫片刻,之后 ...

  7. 洛谷1373(dp)

    常规线性dp,需要时就加一维.\(dp[i][j][t][s]\)表示在点\((i,j)\)时瓶子里剩\(t\)且为\(s\)走(0代表小a,1代表uim)时的方案数. de了半天发现是初次尝试的快速 ...

  8. 洛谷--橙色百道DP总结

    最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...

  9. 洛谷 深基 第4部分 基础数学与数论(19-21课)

    洛谷 深基 第4部分 基础数学与数论  第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...

最新文章

  1. 一文带你了解 MySQL 中的各种锁机制!
  2. python一键安装包_Python一键安装全部依赖包
  3. 如何找到安全的贷款机构
  4. 阿里最喜欢问的多线程顺序打印的5种解法!
  5. 云和恩墨大讲堂丨PostgreSQL逻辑复制案例分享
  6. 台式电脑如何重装系统windows10
  7. Ubuntu下Hadoop的安装和配置
  8. 【机器学习系列】GMM第一讲:两个角度认识高斯混合模型
  9. 课程设计题五:汽车尾灯控制器设计
  10. Redis实战第一篇
  11. 简述在计算机中如何添加或删除输入法,Windows 7系统怎么添加或删除输入法?方法介绍...
  12. 李小铭计算机专业应聘书作文,应聘申请书英语作文
  13. uniapp APPH5端获取地理位置信息(百度地图高德地图)
  14. robo3T-操作MongoDB数据库常用命令
  15. 【kimol君的无聊小发明】—用python插入独创性声明
  16. python快速实现数字华容道小游戏
  17. 后缀是lnk是什么文件_lnk是什么格式_lnk后缀是什么格式
  18. c语言写一个简单的小游戏-推箱子
  19. ccflow 代码分析
  20. 卖书如何通过B站引流?方法用对后效果都不会太差

热门文章

  1. 允许服务与桌面交互_vivo 正式推出 Origin OS,融合自然设计与全新交互_搜狐汽车...
  2. linux配置ip地址 routes,CentOS 7 设置网络IP地址(示例代码)
  3. Java将mysql输出csv_使用Java将大量数据从数据库导出到.csv时出...
  4. android 获取当前画布,Android硬件位图填坑之获取硬件画布
  5. 支付宝 统一支付 php,支付宝APP支付 统一下单 php服务端 tp5
  6. php复制整个文件夹,PHP实现递归复制整个文件夹的类实例
  7. [Java基础]为什么会出现字符流?与编码表介绍
  8. [蓝桥杯2018初赛]日志统计-双指针
  9. C++map容器-插入和删除
  10. 汉诺塔 X HDU - 2511