题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655

先考虑DP。dp[ i ][ j ]表示值域为 i 、选 j 个值的答案,则 dp[ i ][ j ] = dp[ i-1 ][ j ] + dp[ i-1 ][ j-1] * i * j 。两项分别表示一定不选/一定选第 i 个值。

因为答案是值域大、个数小,所以考虑只看 dp[ ][ n ] ,即把值域看成自变量。

不知怎么知道这个式子的次数是 2*n 。尝试用做几遍差分看什么时候数列都为0的方法来看,但得出应该是 2*n - 2 次才对呀……

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=,K=,M=;
ll dp[M][M],c[M];
int pw(int x,int k)
{
int ret=;while(k){if(k&)ret*=x;x*=x;k>>=;}return ret;
}
int main()
{
dp[][]=;
for(int i=;i<=K;i++)
for(int j=;j<=N;j++)
dp[i][j]=dp[i-][j]+dp[i-][j-]*i*j;
for(int i=N;i<=K;i++)c[i]=dp[i][N];
int cnt=,nw=N;
while(c[K])
{
for(int i=K;i>=nw;i--)
c[i]-=c[i-]; c[nw-]=;
for(int i=;i<=K;i++)
printf("%6lld ",c[i]); puts("");
nw++; cnt++;
}
printf("cnt=%d\n",cnt);
return ;
}

打表观察

以为值域<个数的dp无意义,于是选择 n~3*n 这 2*n+1 个值。但其实值域<个数的也能用。

注意 x[ i ] - x[ j ] 有负数,最后(答案+mod)%mod。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=;
int n,A,mod,dp[N*][N],ans;
int pw(int x,int k)
{
int ret=;while(k){if(k&)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=;}return ret;
}
int main()
{
scanf("%d%d%d",&A,&n,&mod);
int lm=n*;
for(int i=;i<=lm;i++)dp[i][]=;///
for(int i=;i<=lm;i++)
for(int j=;j<=i&&j<=n;j++)
dp[i][j]=(dp[i-][j]+(ll)dp[i-][j-]*i%mod*j)%mod;
if(A<=lm)
{
printf("%d\n",dp[A][n]);return ;
}
int s0,s1;
for(int i=n;i<=lm;i++)
{
s0=; s1=;//////
for(int j=n;j<=lm;j++)
{
if(j==i)continue;
s0=(ll)s0*(A-j)%mod; s1=(ll)s1*(i-j)%mod;
}
ans=(ans+(ll)s0*pw(s1,mod-)%mod*dp[i][n]%mod)%mod;
}
printf("%d\n",(ans+mod)%mod);
return ;
}

bzoj 2655 calc——拉格朗日插值的更多相关文章

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

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

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

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

  3. bzoj 2566 calc 拉格朗日插值

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

  4. BZOJ.2655.calc(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 待补.刚刚政治会考完来把它补上了2333.考数学去了. DP: 首先把无序化成有序,选严格递增的数,最后乘个\(n!\). 然后容易想到令\(f_{i,j}\)表示到第\(i\)个数, ...

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

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

  6. bzoj 2655: calc [容斥原理 伯努利数]

    2655: calc 题意:长n的序列,每个数\(a_i \in [1,A]\),求所有满足\(a_i\)互不相同的序列的\(\prod_i a_i\)的和 clj的题 一下子想到容斥,一开始从普通容 ...

  7. [BZOJ 2655]calc

    Description 题库链接 给出 \(A,n,p\) ,让你在模 \(p\) 意义下求所有序列 \(a\) 满足"长度为 \(n\) 且 \(a_i\in[1,A]\) ,并且对于 \ ...

  8. BZOJ 2655 calc (组合计数、DP、多项式、拉格朗日插值)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2655 题解 据说有一种神仙容斥做法,但我不会. 以及貌似网上大多数人的dp和我的做法都不 ...

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

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

随机推荐

  1. 系统封装接口层 cmsis_os

    在这个实时操作系统泛滥的年代,有这么一个系统封装接口层还是蛮有必要的.前些时间偶然间在STM32最新的固件库中就发现了这个系统封装接口,当时就把自己所用的系统进行封装.直到最近KEIL5.0发现其中所 ...

  2. Linux下的文件查找命令——find

    Linux下几个常见的文件查找命令: which       查看可执行文件的位置 whereis    寻找特定文件,查看文件的位置 locate       配合数据库查看文件位置 find    ...

  3. cocos2dx打飞机项目笔记一:项目结构介绍

    最近在学习cocos2dx引擎,版本是2.1.3,开发环境是win7 + vs2010,模仿微信打飞机游戏,开发中参考了 csdn 偶尔e网事 的系列文章:http://blog.csdn.net/c ...

  4. 机器学习性能指标之ROC和AUC理解与曲线绘制

    一. ROC曲线 1.roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性. 横轴:负正类率(false po ...

  5. Linux基本常用命令

    说到Linux,它就是基于POSIX和UNIX的多用户,多任务,支持多线程和多CPU的操作系统.它能运行主要的UNIX的工具软件,应用程序和网络协议.它支持32位和64位硬件.linux继承Unix以 ...

  6. 算法总结之 删除链表的中间节点和a/b处的节点(链表中间节点的重要思想)

    给定链表的表头节点head,实现删除链表的中间节点的函数 推展: 给定链表的头节点,整数a 和 整数 b,实现删除a/b处节点的函数 先来分析原问题, 长度1  直接返回 长度2 将头节点删除 长度3 ...

  7. mapreduce实现学生平均成绩

    思路: 首先从文本读入一行数据,按空格对字符串进行切割,切割后包含学生姓名和某一科的成绩,map输出key->学生姓名    value->某一个成绩 然后在reduce里面对成绩进行遍历 ...

  8. javascript 时间日期处理相加相减

    var d = new Date("2008/04/15"); d.setMonth(d.getMonth() + 1 + 1);//加一个月,同理,可以加一天:getDate() ...

  9. div css 练习1

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 初始化dataframe

    由字典生成dataframe: >>> d = {'col1': [1, 2], 'col2': [3, 4]} >>> df = pd.DataFrame(dat ...