[hiho1952]运算数
可以发现如果将根的结果写成多项式,可以发现只需要预处理出f[i][j]表示以i为根的子树j次项有多少个,g[i]表示从n个数中选取i个数相乘的和,就可以通过\sum_{i=1}^{n}f[1][i]\cdot g[i]\cdot (n-i)!$计算。可以发现有递推式:$g[i]=g[i-1]\cdot i\cdot \sum_{i=1}^{n}a[j]$,当符号是+,f[i][j]=f[ls][j]+f[rs[j]];当符号是*,$f[i][j]=\sum\limits_{k=1}^{j-1}f[ls][k]\cdot f[rs][j-k]$;当是叶子节点,f[i][j]=[j==1]。


1 #include<bits/stdc++.h>
2 using namespace std;
3 #define mod 1000000007
4 #define N 6005
5 long long n,p,ans,jc[N],a[N],x[N],y[N],sz[N],dp[N][N],f[N];
6 char s[N][11];
7 void dfs(int k){
8 if (!x[k]){
9 sz[k]=dp[k][1]=1;
10 return;
11 }
12 dfs(x[k]);
13 dfs(y[k]);
14 sz[k]=sz[x[k]]+sz[y[k]];
15 if (s[k][0]=='+')
16 for(int i=1;i<=sz[k];i++)dp[k][i]=(dp[x[k]][i]+dp[y[k]][i])%mod;
17 else
18 for(int i=1;i<=sz[x[k]];i++)
19 for(int j=1;j<=sz[y[k]];j++)dp[k][i+j]=(dp[k][i+j]+dp[x[k]][i]*dp[y[k]][j])%mod;
20 }
21 int main(){
22 scanf("%lld",&n);
23 for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
24 f[0]=1;
25 for(int i=1;i<=n;i++)
26 for(int j=i;j>=0;j--)f[j]=(f[j]+j*f[j-1]%mod*a[i])%mod;
27 for(int i=1;i<=2*n-1;i++){
28 scanf("%lld",&p);
29 if (p==1)scanf("%lld%lld%s",&x[i],&y[i],s[i]);
30 }
31 jc[1]=1;
32 for(int i=2;i<=n;i++)jc[i]=jc[i-1]*i%mod;
33 dfs(1);
34 for(int i=1;i<=n;i++)ans=(ans+jc[n-i]*dp[1][i]%mod*f[i])%mod;
35 printf("%lld",ans);
36 }
[hiho1952]运算数的更多相关文章
- PHP赋值运算
1. 赋值运算:= ,意思是右边表达式的值赋给左边的运算数. $int1=10; $int1=$int1-6; //$int1=4 echo $int1,"<br>"; ...
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- JavaScript基础
JavaScript基础 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处 ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- Python学习--02输入和输出
命令行输入 x = input("Please input x:") y = raw_input("Please input x:") 使用input和raw_ ...
- JS中typeof与instanceof的区别
JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: Typeof typeof 是一个一元运算,放在一个运算数之前 ...
- 前端之JavaScript基础
前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...
- javascript 基础
javascript概述: javascript历史: * 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEas ...
- 【转】一千行MySQL学习笔记
/* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ ...
随机推荐
- Midway Serverless 发布 2.0,一体化让前端研发再次提效
作者 | 张挺 来源 | Serverless 公众号 自去年 Midway Serverless 1.0 发布之后,许多业务开始尝试其中,并利用 Serverless 容器的弹性能力,减少了大量研发 ...
- 3D渲染
3d渲染的本质是在三维坐标系中绘制很三角形,用三角形拼成物体,然后投影到二维图像上,所以做渲染就是画好这些三角形;3d渲染输入的是很多三角形的3个顶点和属性,输出的是一张2d图.画好三角形要研究给三角 ...
- 魔改swagger:knife4j的另外一种打开方式
之前公司使用了swagger作为文档管理工具,原生的swagger-ui非常丑,之后就用了开源项目 萧明 / knife4j 的swagger组件进行了swagger渲染,改造之后界面漂亮多了,操作也 ...
- 面试官:Java从编译到执行,发生了什么?
面试官:今天从基础先问起吧,你是怎么理解Java是一门「跨平台」的语言,也就是「一次编译,到处运行的」? 候选者:很好理解啊,因为我们有JVM. 候选者:Java源代码会被编译为class文件,cla ...
- Bug概述、状态、类型、级别、优先级提交和Bug生命周期管理
缺陷概述: 1)缺陷(Defect):是指存在于软件之中偏差,可被激活,以静态形式存在于软件内部,相当于Bug. 2)故障(Fault):当缺陷被激活后,软件运⾏中出现的状态,可引起意外情况,若不加处 ...
- 关于takin-data,你想知道的都在这里(一)启动命令篇
通过docker部署体验takin的小伙伴都应该知道,在安装部署手册中有提到:在启动surge-deploy任务前,需要将启动命令中的ip参数替换为docker容器所在宿主机的ip,很多小伙伴都在这里 ...
- the Agiles Scrum Meeting 3
会议时间:2020.4.11 21:30 1.每个人的工作 今天已完成的工作 yjy:基本实现广播功能的前端 issues:小组任务1-增量开发组 wjx:基本实现注销功能的后端 issues:小组任 ...
- 攻防世界 杂项 2.embarrass
解1: linux环境下直接strings misc_02.pcapng | grep flag可得flag. 解2: 使用wireshark搜索flag. 解3: winhex搜索flag.
- 【做题记录】[NOIP2016 普及组] 魔法阵
P2119 魔法阵 2016年普及组T4 题意: 给定一系列元素 \(\{X_i\}\) ,求满足以下不等式的每一个元素作为 \(a,b,c,d\) 的出现次数 . \[\begin{cases}X_ ...
- 全志Linux Tina编译demoOmxVdec错误
测试裸流 Making install in demoOmxVdec make[6]: Entering directory '/home/liuxueneng/WorkCode/Homlet-Tin ...