[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 */ ...
随机推荐
- k8s deployment controller源码分析
deployment controller简介 deployment controller是kube-controller-manager组件中众多控制器中的一个,是 deployment 资源对象的 ...
- 每个男孩的机械梦「GitHub 热点速览 v.21.41」
作者:HelloGitHub-小鱼干 机械臂可能在医疗剧中看过,可以用来执行一些精细化的操作,例如:缝合之类的.但这次 Dummy-Robot 让你不仅看看而已,还具备一定的实操性(有一定的动手.经济 ...
- Android系统编程入门系列之应用间数据共享ContentProvider
内容提供者ContentProvider与前文的界面Activity.服务Service.广播接收者BroadcastReveiver,并列称为Android的四大组件,均是需要自定义子类继承上述组件 ...
- spoj2 prime1 (区间筛)
给定t组询问,每组询问包括一个l和r,要求\([l,r]\)的素数有哪些 其中\(t \le 10,1 \le l \le r \le 1000000000 , r-l \le 100000\) Qw ...
- NX开发库版本问题
有做NX二次开发的朋友经常问我这样的问题:我在NX8.0上开发的程序,可以在NX9.0上运行吗? 由于NX的开发库随着版本的更新也会不断更新,会增加新的方法,同时有些也会过时或者消失. 如下图:NX8 ...
- Prometheus基于Eureka的服务发现
Prometheus基于Eureka的服务发现 一.背景 二.实现步骤 1.eureka 客户端注册到prometheus中 2.prometheus中的写法 3.实现效果 三.完整代码 四.参考链接 ...
- Noip模拟36 2021.8.11
刚题的习惯还是改不了,怎么办??? T1 Dove打扑克 考场上打的动态开点线段树+并查集,考后发现自己像一个傻子,并查集就行.. 这几天恶补数据结构疯了 用树状数组维护后缀和,$siz_i$表示编号 ...
- 8.18考试总结[NOIP模拟43]
又挂了$80$ 好气哦,但要保持优雅.(草 T1 地衣体 小小的贪心:每次肯定从深度较小的点向深度较大的点转移更优. 模拟一下,把边按链接点的子树最大深度排序,发现实际上只有上一个遍历到的点是对当前考 ...
- 五分钟搞懂spring-cloud-square
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 初识spring-cloud-square 2021年 ...
- 关于麦克风的参数介绍 - 驻极体麦克风(ECM)和硅麦(MEMS)
1.麦克风的分类1.1.动圈式麦克风(Dynamic Micphone)原理:基本构造包含线圈.振膜.永久磁铁三部分.当声波进入麦克风,振膜受到声波的压力而产生振动,与振膜在一起的线圈则开始在磁场中移 ...