BZOJ-7-2655: calc-DP-拉格朗日插值】的更多相关文章

[题意]一个序列$a_1,...,a_n$合法当且仅当它们都是[1,A]中的数字且互不相同,一个序列的价值定义为数字的乘积,求所有序列的价值和.n<=500,A<=10^9,n+1<A<mod<=10^9,mod是素数. [算法]动态规划+拉格朗日插值 [题解]这道题每个数字的贡献和序列选了的数字积关系密切,所以不能从序列角度考虑(和具体数字关系不大). 设$f_{n,m}$表示前n个数字(值域)中取m个数字的答案,那么枚举取或不取数字n,取n时乘n且有j个位置可以插入,即:…
题意 题目链接 Sol 首先不难想到一个dp 设\(f[i][j]\)表示选了\(i\)个严格递增的数最大的数为\(j\)的方案数 转移的时候判断一下最后一个位置是否是\(j\) \[f[i][j] = f[i][j - 1] + f[i - 1][j - 1] * j\] for(int i = 0; i <= A; i++) f[0][i] = 1; for(int i = 1; i <= N; i++) for(int j = 1; j <= A; j++) f[i][j] = a…
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}+…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559 看了看拉格朗日插值:http://www.cnblogs.com/ECJTUACM-873284962/p/6833391.html https://blog.csdn.net/lvzelong2014/article/details/79159346 https://blog.csdn.net/qq_35649707/article/details/78018944 还只会最简单的…
[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\)次多项式,恩,很对,…
bzoj 题意: 给出\(n\),现在要生成这\(n\)个数,每个数有一个值域\([1,A]\).同时要求这\(n\)个数两两不相同. 问一共有多少种方案. 思路: 因为\(A\)很大,同时随着值域的不断增加,感觉最终的答案像个多项式,又因为\(0\leq A\leq n\)时的答案很显然..所以猜一发这是一个最高项次数为\(2n\)的多项式,然后拉格朗日插值搞就行了(滑稽). 求方案数的时候\(dp\)来求(我好像是乱搞搞出来的). /* * Author: heyuhhh * Created…
这个题我们首先可以dp,f[i][j]表示前i个科目恰好碾压了j个人的方案数,然后进行转移.我们先不考虑每个人的分数,先只关心和B的相对大小关系.我们设R[i]为第i科比B分数少的人数,则有f[i][j]=sum f[i-1][k]*C(k,j)*C(n-1-k,R[i]-j)  (k>=j) 怎么解释呢,首先前i-1科有k个人已经被碾压,k肯定大于等于j,然后考虑当前这一科有j个人被碾压,那么就需要从k个人中选出j个来即C(k,j),然后从剩下的有R[i]-j个人比B考的少,这些人必须是之前i…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559 关于拉格朗日插值,可以看这些博客: https://www.cnblogs.com/ECJTUACM-873284962/p/6833391.html https://blog.csdn.net/qq_35649707/article/details/78018944 这个题要先想好DP方程.dp[ i ][ j ]表示第 i 门课.目前有 j 个人被“碾压”. dp[ i ][ j…
BZOJ 题意即求\[\sum_{i=0}^n\sum_{j=1}^{a+id}\sum_{x=1}^jx^k\] 我们知道最后一个\(\sum\)是自然数幂和,设\(f(n)=\sum_{x=1}^nx^k\),这是一个\(k+1\)次多项式,可以插值求出(当然本题只需要求出任意\(k+3\)个值即可不需要插值). 令\(g(n)=\sum_{i=1}^nf(i)\),(打表)差分可知这是一个\(k+2\)次多项式. 同样令\(h(n)=\sum_{i=0}^ng(a+id)\),同样差分可知…
传送门 设\(dp[i][j]\)为考虑\(i\)个数,其中最大值不超过\(j\)的答案,那么转移为\[dp[i][j]=dp[i-1][j-1]\times i\times j+dp[i][j-1]\] 即最大值不超过\(j-1\)的答案加上最大值刚好为\(j\)的答案,乘上\(i\)是因为\(j\)可以放在\(i\)个数里随便哪个位置 考虑把转移拆开\[dp[i][j]=\sum_{k=0}^{j-1}dp[i-1][k]\times i\times (k+1)\] 如果把\(i\)看成列,…