挖我自闭了这是什么东西啊。

给出一棵深度为  的树,其中深度为  的节点有  个儿子。问树上的简单路径中长度在  之间的每个有多少条。

 表示对于在  层的  个节点,向下走  步的方案数

 表示对于在  层的  个节点,向上走  步的方案数

然后我们可以得到这样的递推式。

 f[i][j]=a[i]*f[i+1][j-1]);
g[i][j]=(j>=2)*(a[i-1]-1)*f[i][j-2]+g[i-1][j-1]);
显然对于一条路径会算两次。所以最终答案除以 2
 即可。
你以为这就完了?
下面才是自闭的开始。
256M大概能开6e7?记不清了。。。所以我们只能开一个[5000][9999]这样纸的数组,然后滚来滚去滚来滚去。
ac代码:
 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9+;
int n;
int a[],c[];
int f[][],ans[];
int main(){
ios::sync_with_stdio(false);
cin>>n;c[]=;
for(int i=;i<n;i++)cin>>a[i];
for(int i=;i<=n;i++)c[i]=1ll*a[i]*c[i-]%mod;
for(int i=n;i>=;i--){
f[i][]=;
for(int j=;j<=n-i;j++){
f[i][j]=(1ll*a[i]*f[i+][j-])%mod;
ans[j]=(1ll*f[i][j]*c[i-]+ans[j])%mod;
}
}
for(int i=;i<=n;i++){
for(int j=*n-;j>=;j--){
f[i][j]=f[i-][j-];
if(i>&&j>)
f[i][j]=(1ll*(a[i-]-)*f[i][j-]+f[i][j])%mod;
ans[j]=(1ll*f[i][j]*c[i-]+ans[j])%mod;
}
}
for(int i=;i<=*n-;i++){
cout<<(mod+1ll)*ans[i]/%mod<<' ';
}
}

MLE ON TEST 01 代码:

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9+;
int n;
int a[];
int f[][],g[][];
int main(){
ios::sync_with_stdio(false);
cin>>n;a[]=;
for(int i=;i<n;i++)cin>>a[i];
for(int i=;i<=n;i++)
f[i][]=a[i],f[i][]=;
for(int i=;i<=n;i++)
g[i][]=,g[i][]=;
for(int i=n-;i>=;i--){
for(int j=;j<=n-i;j++){
f[i][j]=(1ll*a[i]*f[i+][j-])%mod;
}
}
for(int i=;i<=n;i++){
for(int j=;j<=*n-;j++){
g[i][j]=(1ll*(j>=)*(a[i-]-)*f[i][j-]+g[i-][j-])%mod;
}
}
for(int i=;i<=n;i++)a[i]=1ll*a[i]*a[i-]%mod;
for(int i=;i<=*n-;i++){
ll sum = ;
for(int j=;j<=n;j++){
sum=(sum+1ll*a[j-]*(f[j][i]+g[j][i])%mod)%mod;
}
cout<<sum/<<' ';
}
}
 

cf954H的更多相关文章

  1. CF954H Path Counting

    一开始的想法是枚举路径的 \(\rm LCA\) 然后再枚举两边的深度,但是这样无论如何我都只能做到 \(O(n ^ 3)\) 的复杂度. 只能考虑换一种方式计数,注意到点分治可以解决树上一类路径问题 ...

随机推荐

  1. JavaScript 中回调地狱的今生前世

    1. 讲个笑话 JavaScript 是一门编程语言 2. 异步编程 JavaScript 由于某种原因是被设计为单线程的,同时由于 JavaScript 在设计之初是用于浏览器的 GUI 编程,这也 ...

  2. win32下使用相对exe文件的绝对路径资源

    在使用VC++进行开发时,如果按F5进行Debug时,当前相对资源是相对工程的vcxproj的文件夹目录,而直接双击运行exe时,资源是相对exe的文件夹目录.为了兼容这二者,最好使用绝对路径,这样无 ...

  3. shell编程学习笔记(七):Shell中将指定内容输出到文件中

    我们这里把echo要打印的内容输出到文件中 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script06.sh 开始编写script ...

  4. JAVA项目中引用Logback的方法

    一.简介 本文主要讲JAVA项目中引入Logback的方法. 二.解决 1.引入依赖. <!--Begin LogBack Log--> <!-- https://mvnreposi ...

  5. Hierarchical softmax(分层softmax)简单描述.

    最近在做分布式模型实现时,使用到了这个函数. 可以说非常体验非常的好. 速度非常快,效果和softmax差不多. 我们知道softmax在求解的时候,它的时间复杂度和我们的词表总量V一样O(V),是性 ...

  6. mybatis插入一个对象后获取表中自增的主键Id并且传入到插入的的对象中,方便将对象中其他属性赋值给其他以前表主键Id作为非空字段的表

    原本的sql语句为: <insert id="xx" parameterType="com.hrt.partner.model.ShopInsert"&g ...

  7. redis学习 (key)键,Python操作redis 键 (二)

    # -*- coding: utf-8 -*- import redis #这个redis 连接不能用,请根据自己的需要修改 r =redis.Redis(host=") 1. delete ...

  8. kubernetes 学习资料

    谷歌大神详解 Kubernetes 配置管理最佳方法 https://www.kubernetes.org.cn/3031.html all in on kubernetes https://gith ...

  9. tensorflow 笔记14:tf.expand_dims和tf.squeeze函数

    tf.expand_dims和tf.squeeze函数 一.tf.expand_dims() Function tf.expand_dims(input, axis=None, name=None, ...

  10. window10下TensorFlow-gpu环境搭建

    安装python 下载python3.5.4 https://www.python.org/downloads/release/python-354/ 选择Windows x86-64 executa ...