题目: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. 计算机网络概述 传输层 TCP可靠传输的实现

    TCP可靠传输的实现 TCP的可靠性表现在:它向应用层提供的数据是 无差错的.有序的.无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. TCP采用了流量控制.拥塞控 ...

  2. Struts2笔记03——架构(转)

    原始内容:https://www.tutorialspoint.com/struts_2/basic_mvc_architecture.htm 架构(很重要!尤其是图!) 从一个比较高的层次来看,St ...

  3. Keepalived + LVS/DR 安装配置

    Keepalived + LVS/DR 说明 Keepalived:可以踢出掉故障服务 Keepalived:可以实现主从切换,解决单点故障 实验环境 四台主机:Linux Centos 6.4 32 ...

  4. 一、安装虚拟机,配置ip地址

    一.安装linux 注意点: 一.选择最小化安装的时候,要自定义安装软件,必须要安装下面的 如果没有安装上面的,需要用下面的命令来查询安装 如果没有安装就会出现各种问题 二.分区简单介绍 1.至少要一 ...

  5. Java 重写equals()与hashCode()方法

    List对象的contains方法实际上也是调用的equals()方法来进行逐条对比的. 示例代码: package com.imooc.collection; /** * 课程类 */ public ...

  6. 中文乱码问题(页面乱码,eclipse乱码,请求响应乱码)

    1.首先在开发工具eclipse中设置工作空间和文件编码格式,详情参见   http://www.cnblogs.com/lixiang1993/p/7345161.html 2.在eclipse的安 ...

  7. PAT1021. Deepest Root (25)

    之前不知道怎么判断是不是树,参考了 http://blog.csdn.net/eli850934234/article/details/8926263 但是最后有一个测试点有超时,在bfs里我用了数组 ...

  8. Delphi 的 Utf-8 转换

    新版的 Delphi 應該不用這麼麻煩, 據說只要直接在 AnsiString, WideString, UTF8String 之間 assign 時就會自動幫你做轉換 (沒用過, 不知道是不是真的這 ...

  9. Spring Boot入门(二)

    一.Spring Boot项目打包 1.引入maven打包相关插件 2.项目右击run as>Maven clean.run as>Maven install在target文件夹下会生成相 ...

  10. 20个PHP面试题及答案

    php学了那么久了,先来小试牛刀,看下这些PHP程序员面试题都会不会?初级题目1.问题:请用最简单的语言描述PHP是什么?答:PHP全称:Hypertext Preprocessor,是一种用来开发动 ...