题意

给定一个长度为 \(n\) 的序列 \(a_i\),求出在这个序列中所有选出 \(k\) 个元素方案中元素的乘积之和。

\(\texttt{Data Range:}1\leq n\leq 10^5,1\leq k\leq 300\)

题解

多项式乘法。

很明显答案为

\[[x^k]\prod\limits_{i=1}^{n}(1+a_ix)
\]

来考虑一下证明。

这些多项式乘积中 \(x^k\) 的系数相当于在 \(n\) 个多项式任意选出 \(k\) 个多项式,其中被选出来的的取一次项,剩下的取常数项,将这些东西乘起来的和。这个东西很明显是跟题目等价的。

同时注意到每个多项式是一次多项式所以可以 \(O(n)\) 乘起来,总复杂度 \(O(nk)\)。

考虑一个加强版,其中 \(1\leq n\leq 5\times 10^5,1\leq k\leq 5\times10^5\) 并且对 \(998244353\) 取模,这个时候剩下题解中的 DP 就基本上不能用了,而如果以多项式乘法的角度去思考的话发现这个东西可以分治 NTT,然后 \(O(n\log^2n)\) 就做完了。

代码

#include<bits/stdc++.h>
using namespace std;
typedef int ll;
typedef long long int li;
const ll MAXN=2e5+51,MOD=1e9+7;
ll n,kk,c,x;
ll f[MAXN];
inline ll read()
{
register ll num=0,neg=1;
register char ch=getchar();
while(!isdigit(ch)&&ch!='-')
{
ch=getchar();
}
if(ch=='-')
{
neg=-1;
ch=getchar();
}
while(isdigit(ch))
{
num=(num<<3)+(num<<1)+(ch-'0');
ch=getchar();
}
return num*neg;
}
int main()
{
n=read(),kk=read(),f[0]=1;
for(register int i=1;i<=n;i++)
{
x=read();
for(register int j=c;j>=0;j--)
{
f[j+1]=(f[j+1]+(li)f[j]*x%MOD)%MOD;
}
c=c==kk?kk:c+1;
}
printf("%d\n",f[kk]);
}

最新文章

  1. redux-amrc:用更少的代码发起异步 action
  2. 系统定位在iOS8中的改变
  3. android之ViewFlipper
  4. Visual Studio将Delop之后生成的dll或者wsp复制到指定目录
  5. jquery mobile界面数据刷新
  6. 《Java数据结构与算法》笔记-CH4-6优先级队列
  7. 为什么要坚持用ASP.NET MVC!(②)
  8. Android中解析XML的方法
  9. Oracle 数据库架构
  10. linux 软件安装篇
  11. 读书笔记,《Java 8实战》第五章,使用流
  12. JDBC及Filter
  13. 给hackrf加上1602LCD以及UART(附带固件编译方法)
  14. 初始化centoS 相关
  15. Linux设置开机启动项
  16. 如何在C++中动态建立二维数组(转)
  17. [leetcode]Valid Number @ Python
  18. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserDao' def
  19. 【leetcode 简单】第三十七题 相交链表
  20. kubernetes清除状态为Evicted的pod

热门文章

  1. Centos-将文件内容输出到标准输出-cat
  2. 中秋国庆8天挑战赛 之 挑战8天掌握微信小程序
  3. 【题解】[ZJOI2009]狼和羊的故事
  4. ASP。NET MVC (NetCore 2.0)用于处理实体框架、DbContexts和对象的通用控制器和视图
  5. Cisco思科模拟器 交换机IP地址的配置 入门详解 - 精简归纳
  6. android的adb命令整理
  7. 强大的table组件-antd pro table
  8. c++程序设计实践——银行系统
  9. Verilog基础入门——Vivado流水灯工程(四)(实验报告)
  10. C语言入门编程需要掌握的核心要点有哪些? 为你总结了这20个!