博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3157 国王奇遇记——神奇的推式子
阅读量:5234 次
发布时间:2019-06-14

本文共 2097 字,大约阅读时间需要 6 分钟。

先膜一发,大佬的博客上多项式相关的非常全

题目大意

\[\sum\limits_{i=1}^{n}i^mm^i\]

题解

设一个函数\(f(i)=\sum\limits_{j=1}^{n}j^im^j\)

然后貌似用一个叫扰动法(感觉就是错位相消法)的东西,算一下
\[(m-1)f(i)=\sum\limits_{j=1}^{n+1}(j-1)^im^j-\sum\limits_{i=1}^{n}j^im^j=n^im^{n+1}-\sum\limits_{j=1}^{n}m^j[(j-1)^i-j^i]\]
其中,\((j-1)^i-j^i\)可以用一波二项式展开化为\(\sum\limits_{k=0}^{i-1}\binom{i}{k}(-1)^{i-k}j^k\),回带可得
\[(m-1)f(i)=n^im^{n+1}-\sum\limits_{j=1}^{n}m^j\sum\limits_{k=0}^{i-1}\binom{i}{k}(-1)^{i-k}j^k\]\[=n^im^{n+1}-\sum\limits_{k=0}^{i-1}\binom{i}{k}(-1)^{i-k}\sum\limits_{j=1}^{n}j^km^j\]\[=n^im^{n+1}-\sum\limits_{k=0}^{i-1}\binom{i}{k}(-1)^{i-k}f(k)\]
然后就有了一个\(O(m^2)\)的递推做法,还有一个\(O(m)\)的,但看起来挺麻烦的,咕了
以下是代码,注意初值\(f(0)\)的设置还有\(m=1\)时的特判

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define ull unsigned long long#define pii pair
#define uint unsigned int#define mii map
#define lbd lower_bound#define ubd upper_bound#define INF 0x3f3f3f3f#define IINF 0x3f3f3f3f3f3f3f3fLL#define vi vector
#define ll long long#define mp make_pair#define pb push_back#define re register#define il inline#define MOD 1000000007#define M 1000int n, m;int C[M+5][M+5];int f[M+5];int fpow(int x, int p) { int ret = 1; while(p) { if(p&1) ret = 1LL*ret*x%MOD; x = 1LL*x*x%MOD; p >>= 1; } return ret;}void init() { for(int i = 0; i <= m; ++i) C[i][0] = 1; for(int i = 1; i <= m; ++i) for(int j = 1; j <= i; ++j) C[i][j] = (C[i-1][j-1]+C[i-1][j])%MOD; f[0] = (1LL*(fpow(m, n+1)-1)*fpow(m-1, MOD-2)%MOD-1+MOD)%MOD;}int main() { scanf("%d%d", &n, &m); if(m == 1) { printf("%lld\n", 1LL*n*(n+1)%MOD*fpow(2, MOD-2)%MOD); return 0; } init(); for(int i = 1; i <= m; ++i) { // 递推 f[i] = 1LL*fpow(n, i)*fpow(m, n+1)%MOD; for(int j = 0; j <= i-1; ++j) { if((i-j)&1) f[i] = (f[i]-1LL*C[i][j]*f[j]%MOD)%MOD; else f[i] = (f[i]+1LL*C[i][j]*f[j]%MOD)%MOD; } f[i] = (1LL*f[i]*fpow(m-1, MOD-2)%MOD+MOD)%MOD; } printf("%d\n", f[m]); return 0;}

转载于:https://www.cnblogs.com/dummyummy/p/10913073.html

你可能感兴趣的文章
【译】如何使用webpack减少vuejs打包的大小
查看>>
python(windows版本安装,Geanypython编辑器安装)
查看>>
python变量和简单数据类型
查看>>
Java多线程编程核心技术-第1章-Java多线程技能-读书笔记
查看>>
Java多线程编程核心技术-第2章-对象及变量的并发访问-读书笔记
查看>>
Java多线程编程核心技术-第5章-定时器 Timer-读书笔记
查看>>
Java多线程编程核心技术-第7章-拾遗增补-读书笔记
查看>>
Java多线程编程核心技术-第3章-线程间通信-读书笔记
查看>>
Java多线程编程核心技术-第4章-Lock的使用-读书笔记
查看>>
Java多线程编程核心技术-第6章-单例模式与多线程-读书笔记
查看>>
[转载]oracle xml操作
查看>>
Java并发--Java中的CAS操作和实现原理
查看>>
理解serialVersionUID是什么?有什么用?如何生成?
查看>>
java1.8新特性整理(全)
查看>>
java.util.ConcurrentModificationException 异常问题详解
查看>>
快速安装python3
查看>>
elementUI之通过指定 Table 组件的 row-class-name 属性来为 Table 中的某一行添加 class改变该行的颜色等样式。...
查看>>
小技巧
查看>>
深度学习图像配准 Image Registration: From SIFT to Deep Learning
查看>>
检测算法简介及其原理——fast R-CNN,faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3
查看>>