首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
bzoj 2655 calc——拉格朗日插值
】的更多相关文章
bzoj 2655 calc —— 拉格朗日插值
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655 先设 f[i][j] 表示长度为 i 的序列,范围是 1~j 的答案: 则 f[i][j] = f[i-1][j-1] * i * j + f[i][j-1],分别是选不选 j,选 j 的话放在哪个位置: 看不出次数...据说这是个最高次数为 2i 的多项式,感性理解... 知道了次数,就可以用拉格朗日插值算了,DP得到比较小的 2*n+1 个值,即可算出 x=A 的答案. 代码如下…
BZOJ 2655: calc(拉格朗日插值)
传送门 解题思路 首先比较容易能想到\(dp\),设\(f[i][j]\)表示前\(j\)个数,每个数\(<=i\)的答案,那么有转移方程:\(f[i][j]=f[i-1][j-1]*i*j+f[i-1][j]\).这个转移复杂度是\(O(n*A)\)的,无法通过此题.考虑优化,打个表发现这其实是一个多项式,次数可以用差分法确定,然后用拉格朗日插值即可. 代码 #include<iostream> #include<cstdio> #include<cstring>…
bzoj 2655 calc——拉格朗日插值
题目: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 .尝试用做几遍差分看什么时…
bzoj 2566 calc 拉格朗日插值
calc Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 377 Solved: 226[Submit][Status][Discuss] Description 一个序列a1,...,an是合法的,当且仅当: 长度为给定的n. a1,...,an都是[1,A]中的整数. a1,...,an互不相等. 一个序列的值定义为它里面所有数的乘积,即a1a2...an. 求所有不同合法序列的值的和. 两个序列不同当且仅当他们任意一位不一样. 输出答案对一…
BZOJ.2655.calc(DP/容斥 拉格朗日插值)
BZOJ 洛谷 待补.刚刚政治会考完来把它补上了2333.考数学去了. DP: 首先把无序化成有序,选严格递增的数,最后乘个\(n!\). 然后容易想到令\(f_{i,j}\)表示到第\(i\)个数,当前选的是\(j\)的价值和.复杂度是\(O(nA)\)的.然后忘掉这个做法吧这个做法没前途. 上面这个做法最后还要\(O(A)\)求一遍和,感觉不够优美. 直接令\(f_{i,j}\)表示选了\(i\)个数,选的最大的数\(\leq j\)的价值和.转移为:\(f_{i,j}=f_{i,j-1}+…
P4463 [集训队互测2012] calc 拉格朗日插值 dp 多项式分析
LINK:calc 容易得到一个nk的dp做法 同时发现走不通了 此时可以考虑暴力生成函数. 不过化简那套不太熟 且最后需要求多项式幂级数及多项式exp等难写的东西. 这里考虑观察优化dp的做法. 不容易看出 f(n,k)是关于k的2n+1次多项式. 证明可以用数学归纳法证明 且还可以从非常规律的转移中看出这应该是一个形似多项式的东西. 可以直接O(n)拉格朗日插值 不过这里懒得写因为 外面dp是\(n^2\)求点值的所以这里没必要O(n). 注意初始化. const ll MAXN=1010;…
bzoj 2655: calc [容斥原理 伯努利数]
2655: calc 题意:长n的序列,每个数\(a_i \in [1,A]\),求所有满足\(a_i\)互不相同的序列的\(\prod_i a_i\)的和 clj的题 一下子想到容斥,一开始从普通容斥的角度考虑,问题在于"规定两个相同,剩下的任意选还可能出现两个相同" 扫了一眼TA的题解,发现他用\(f_i\)表示长i序列的答案.这样的话就很科学了,规定i个相同其他任选时只会多统计i+1个的 \[ f(i) = s(1) f(i-1) - \binom{i-1}{1} s(2) f(…
[BZOJ 2655]calc
Description 题库链接 给出 \(A,n,p\) ,让你在模 \(p\) 意义下求所有序列 \(a\) 满足"长度为 \(n\) 且 \(a_i\in[1,A]\) ,并且对于 \(i\neq j,a_i\neq a_j\)"的价值和. 一个序列的价值定义为 \(\prod\limits_{i=1}^n a_i\) . \(1\leq A\leq 10^9,1\leq n\leq 500,p\leq 10^9\) 并且 \(p\) 为素数, \(p>A>n+1\)…
BZOJ 2655 calc (组合计数、DP、多项式、拉格朗日插值)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2655 题解 据说有一种神仙容斥做法,但我不会. 以及貌似网上大多数人的dp和我的做法都不一样. 下面讲我的做法: 首先由于元素互不相同,那么显然可以先不考虑顺序. 所以要求的就是\(n![x^n]\prod^{m}_{i=1}(1+ix)\) (直接莽上生成函数是不是有点--) 于是发现这个东西和第一类斯特林数生成函数几乎一样,也可以轻易写出递推式\(dp[i][j]=dp[i-1][…
bzoj千题计划269:bzoj2655: calc (拉格朗日插值)
http://www.lydsy.com/JudgeOnline/problem.php?id=2655 f[i][j] 表示[1,i]里选严格递增的j个数,序列值之和 那么ans=f[A][n] * n! A太大,那么用拉格朗日插值法 f[i][j] 是关于i的2j次多项式,证明如下: %%%rqy #include<cstdio> using namespace std; int mod; ][]; ],y[],tot; int Pow(int a,int b) { ; ) ) res=…