题目

P4463 [国家集训队] calc

集训队的题目真是做不动呀\(\%>\_<\%\)

朴素方程

设\(f_{i,j}\)为前\(i\)个数值域\([1,j]\),且序列递增的总贡献,则有:

\[f_{i,j}=f_{i-1,j-1}*j+f{i,j-1}
\]

由于递增序列可以全排列的:\(ans=f_{n,A}×n!\)

时间复杂度\(O(nA)\)

证明一

设\(f_{i,j}\)为关于\(j\)的\(2i\)次多项式,则\(f_{i-1,j-1}*j\)为关于\(j\)的2i-1次多项式,\(f_{i,j-1}\)为关于\(j\)的\(2i\)次多项式

通过归纳法证明出\(f_{i,j}\)为关于\(j\)的\(2i\)次多项式

证明二

设\(f_{i,j}\)为关于\(j\)的\(g(i)\)次多项式,变式:

\[f_{i,j}-f(i,j-1)=f_{i-1,j-1}*j
\]

则有\(g(i)-1=g(i-1)+1\longrightarrow g(i)=g(i-1)+2\),故\(f_{i,j}\)为关于\(j\)的\(2i\)次多项式

具体做法

综上我们已经证明出了\(f_{i,j}\)为关于\(j\)的\(2i\)次多项式,所以仅需\(2i\)项,通过拉格朗日插值法就能得出这个多项式的系数表示法,从而代入\(j=A\)求解即可

而\((i,f_{n,i})\),就相当于多项式在坐标系上的一点,我们需要求出\(2n+1\)个点去确定多项式\(k_0~k_{2n}\)这些系数

Code

  1. #include<bits/stdc++.h>
  2. typedef int LL;
  3. const LL maxn=2e3;
  4. LL A,n,mod,N;
  5. LL y[maxn],f[maxn][maxn];
  6. inline LL Pow(LL base,LL b){
  7. LL ret(1);
  8. while(b){
  9. if(b&1) ret=1ll*ret*base%mod; base=1ll*base*base%mod; b>>=1;
  10. }return ret;
  11. }
  12. inline LL Calc(LL x){
  13. LL ret(0);
  14. for(LL i=1;i<=N;++i){
  15. LL p(y[i]),q(1);
  16. for(LL j=1;j<=N;++j){
  17. if(j!=i){
  18. p=1ll*p*(x-j+mod)%mod;
  19. q=1ll*q*(i-j+mod)%mod;
  20. }
  21. }
  22. ret=(ret+1ll*p*Pow(q,mod-2)%mod)%mod;
  23. }
  24. return ret;
  25. }
  26. int main(){
  27. scanf("%d%d%d",&A,&n,&mod);
  28. N=(n<<1)+1;
  29. for(LL i=0;i<=N;++i) f[0][i]=1;
  30. for(LL i=1;i<=n;++i)
  31. for(LL j=1;j<=N;++j)
  32. f[i][j]=(1ll*f[i-1][j-1]*j%mod+f[i][j-1])%mod;
  33. LL C(1);
  34. for(LL i=2;i<=n;++i) C=1ll*C*i%mod;
  35. for(LL i=1;i<=N;++i) y[i]=f[n][i];
  36. if(A<=N)
  37. printf("%d",1ll*f[n][A]*C%mod);
  38. else
  39. printf("%d",1ll*Calc(A)*C%mod);
  40. return 0;
  41. }

[国家集训队] calc(动规+拉格朗日插值法)的更多相关文章

  1. P4463 [国家集训队] calc(拉格朗日插值)

    传送门 设\(dp[i][j]\)为考虑\(i\)个数,其中最大值不超过\(j\)的答案,那么转移为\[dp[i][j]=dp[i-1][j-1]\times i\times j+dp[i][j-1] ...

  2. [国家集训队] calc

    嘟嘟嘟 这道题dp虽然不难,但是我还是没推出来,感觉最近脑子不太好用啊. 于是就跑去问神仙gjx(全国前三!)了.(外出集训真是好) 神仙不愧是神仙,一会儿就想出来了,而且方法还比网上的题解好懂. d ...

  3. BZOJ2655 calc(动态规划+拉格朗日插值法)

    考虑暴力dp:f[i][j]表示i个数值域1~j时的答案.考虑使其值域++,则有f[i][j]=f[i][j-1]+f[i-1][j-1]*i*j,边界f[i][i]=i!*i!. 注意到值域很大,考 ...

  4. Luogu P4463 [国家集训队] calc

    WJMZBMR的题果然放在几年后看来仍然挺神,提出了一种独特的优化DP的方式 首先我们想一个暴力DP,先定下所有数的顺序(比如强制它递增),然后最后乘上\(n!\)种排列方式就是答案了 那么我们容易想 ...

  5. p4463 [国家集训队] calc

    分析 代码 #include<bits/stdc++.h> using namespace std; ][],Ans; inline int pw(int x,int p){ ; whil ...

  6. [BZOJ2655]calc(拉格朗日插值法+DP)

    2655: calc Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 428  Solved: 246[Submit][Status][Discuss] ...

  7. BZOJ2655 Calc - dp 拉格朗日插值法

    BZOJ2655 Calc 参考 题意: 给定n,m,mod,问在对mod取模的背景下,从[1,m]中选出n个数相乘可以得到的总和为多少. 思路: 首先可以发现dp方程 ,假定dp[m][n]表示从[ ...

  8. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7676  Solved: 3509[Subm ...

  9. bzoj2152 / P2634 [国家集训队]聪聪可可(点分治)

    P2634 [国家集训队]聪聪可可 淀粉质点分治板子 边权直接 mod 3 直接点分治统计出所有的符合条件的点对再和总方案数约分 至于约分.....gcd搞搞就好辣 #include<iostr ...

随机推荐

  1. bash脚本IFS=',' read的意思

    IFS is the Input Field Separator, which means the string read will be split based on the characters ...

  2. uva748 - Exponentiation 高精度小数的幂运算

    uva748 - Exponentiation   Exponentiation  Problems involving the computation of exact values of very ...

  3. Chem 3D中怎么创建立体模型

    ChemDraw作为一款很受大家欢迎的化学绘图软件,其在绘制平面化学方面的功能已经非常的强大了,其实它也可以绘制3D图形.Chem 3D就是绘制3D图形的重要组件.而且为了满足不同的用户绘图的需求,可 ...

  4. linux配置sftp用户的chroot步骤(用户的sftp根文件夹)

    1.编辑ssh中的sftp的配置,命令可能是:vi /etc/ssh/sshd_config 在这个文件里最后增加 #限制sftp组的用户使用sftp时在自己的home文件夹下 Match Group ...

  5. boost::interprocess(1)

    发送端:#include <iostream> #include <windows.h> #include <string> using namespace std ...

  6. 巨蟒python全栈开发-第3天

    1 今日作业 1.有变量name = "aleX leNb" 完成如下操作: # 1)移除 name 变量对应的值两边的空格,并输出处理结果 '''''' ''' # name = ...

  7. Outlook自动回复功能无法使用

    Outlook2010      http://support.microsoft.com/viewkb/viewkb.aspx?contentid=2596516 Outlook2007       ...

  8. cpp中文乱码

    中文乱码 [root@test mediaStudio]# g++ testCgi.cpp [root@test mediaStudio]# ./a.out Content-type:text/htm ...

  9. root Permission denied

    w 遇见现象,原因待查

  10. css3的clip-path属性

    css3的clip-path属性 网上看到的都是因为2年前一个出名的网站引发了对该属性的研究.所以大概是2年前火了一阵子的属性.2016-09-10  23:54:00 直接开始总结它的用法: 2个基 ...