【BZOJ2655】Calc(多项式插值,动态规划)

题面

BZOJ

题解

考虑如何\(dp\)

设\(f[i][j]\)表示选择了\(i\)个数并且值域在\([1,j]\)的答案。

\(f[i][j]=f[i-1][j-1]*i*j+f[i][j-1]\)

即不考虑选择\(j\),以及当前选择\(j\),那么枚举是哪个数,转移即可。

时间复杂度\(O(An)\)。

碰到这种东西我们直接假装它是一个若干次的多项式。

先假设是个\(n\)次多项式,发现不对,

再试试\(2n\)次多项式,恩,很对,

那么直接拉格朗日插值就好了。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 505
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int A,n,m,MOD,f[MAX][MAX<<1];
int fpow(int a,int b)
{
int s=1;
while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}
return s;
}
int Calc(int x)
{
if(x<=m)return f[n][x];
int tmp=1,ret=0,bs=(n&1)?MOD-1:1;
for(int i=1;i<=m;++i)tmp=1ll*tmp*(x-i)%MOD;
for(int i=1;i<=m;++i)tmp=1ll*tmp*fpow(i,MOD-2)%MOD;
for(int i=0;i<=m;++i,bs=MOD-bs)
{
ret=(ret+1ll*bs*f[n][i]%MOD*tmp%MOD)%MOD;
tmp=1ll*tmp*(x-i)%MOD*fpow(x-i-1,MOD-2)%MOD;
tmp=1ll*tmp*(m-i)%MOD*fpow(i+1,MOD-2)%MOD;
}
return ret;
}
int main()
{
A=read();n=read();MOD=read();
m=min(n+n,A);f[0][0]=1;
for(int j=1;j<=m;f[0][j]=1,++j)
for(int i=1;i<=n;++i)
f[i][j]=(f[i][j-1]+1ll*f[i-1][j-1]*i%MOD*j%MOD)%MOD;
printf("%d\n",Calc(A));
return 0;
}

【BZOJ2655】Calc(拉格朗日插值,动态规划)的更多相关文章

  1. bzoj千题计划269:bzoj2655: calc (拉格朗日插值)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2655 f[i][j] 表示[1,i]里选严格递增的j个数,序列值之和 那么ans=f[A][n] * ...

  2. P4463 [集训队互测2012] calc 拉格朗日插值 dp 多项式分析

    LINK:calc 容易得到一个nk的dp做法 同时发现走不通了 此时可以考虑暴力生成函数. 不过化简那套不太熟 且最后需要求多项式幂级数及多项式exp等难写的东西. 这里考虑观察优化dp的做法. 不 ...

  3. bzoj 2655 calc —— 拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655 先设 f[i][j] 表示长度为 i 的序列,范围是 1~j 的答案: 则 f[i][ ...

  4. BZOJ 2655: calc(拉格朗日插值)

    传送门 解题思路 首先比较容易能想到\(dp\),设\(f[i][j]\)表示前\(j\)个数,每个数\(<=i\)的答案,那么有转移方程:\(f[i][j]=f[i-1][j-1]*i*j+f ...

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

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

  6. bzoj 2566 calc 拉格朗日插值

    calc Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 377  Solved: 226[Submit][Status][Discuss] Descr ...

  7. bzoj 2655 calc——拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655 先考虑DP.dp[ i ][ j ]表示值域为 i .选 j 个值的答案,则 dp[ ...

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

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

  9. 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!. 注意到值域很大,考 ...

随机推荐

  1. 前端基础css

    CSS主要学习的是选择器和样式属性. 导入css的方式:行内样式,内部样式,外部样式(推荐使用) 行内样式:在标记的style属性中设定CSS样式 <p style="color: g ...

  2. maven scope属性值设置含义

    1.枚举各个属性值的含义 compile,缺省值,适用于所有阶段,会打包进项目. provided,类似compile,期望JDK.容器或使用者会提供这个依赖. runtime,只在运行时使用,如JD ...

  3. SICP读书笔记 3.5

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  4. HTML基础范例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 程序设计 之 C#实现《拼图游戏》 (上)代码篇

    原理详解请参考博客中 拼图游戏(下)原理篇 http://www.cnblogs.com/labixiaohei/p/6713761.html 功能描述: 1.用户自定义上传图片 2.游戏难度选择:简 ...

  6. spring-boot+swagger实现WebApi文档

    1.引用依赖包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-s ...

  7. trustbox文件破解

    常见的破解方式,是要还原内容的二进制文件,删除加密壳部分的对应二进制数值,然后把剩下的内容保存下来,就实现了破解的任务.  淘宝破解链接:https://item.taobao.com/item.ht ...

  8. zabbix第一篇:zabbix安装及使用

    常用软件安装及使用目录 一:搭建zabbix命令集 cat /etc/redhat-release uname -r getenforce systemctl status firewalld.ser ...

  9. 第一次作业——MathExam285

    MathExam285 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 • Estimate ...

  10. iOS自学-UILabel常见属性

    #import "ViewController.h" #import <CoreText/CoreText.h> @interface ViewController ( ...