cf954H
挖我自闭了这是什么东西啊。
给出一棵深度为
的树,其中深度为
的节点有
个儿子。问树上的简单路径中长度在
之间的每个有多少条。
表示对于在
层的
个节点,向下走
步的方案数
表示对于在
层的
个节点,向上走
步的方案数
然后我们可以得到这样的递推式。
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的更多相关文章
- CF954H Path Counting
一开始的想法是枚举路径的 \(\rm LCA\) 然后再枚举两边的深度,但是这样无论如何我都只能做到 \(O(n ^ 3)\) 的复杂度. 只能考虑换一种方式计数,注意到点分治可以解决树上一类路径问题 ...
随机推荐
- JavaScript 中回调地狱的今生前世
1. 讲个笑话 JavaScript 是一门编程语言 2. 异步编程 JavaScript 由于某种原因是被设计为单线程的,同时由于 JavaScript 在设计之初是用于浏览器的 GUI 编程,这也 ...
- win32下使用相对exe文件的绝对路径资源
在使用VC++进行开发时,如果按F5进行Debug时,当前相对资源是相对工程的vcxproj的文件夹目录,而直接双击运行exe时,资源是相对exe的文件夹目录.为了兼容这二者,最好使用绝对路径,这样无 ...
- shell编程学习笔记(七):Shell中将指定内容输出到文件中
我们这里把echo要打印的内容输出到文件中 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script06.sh 开始编写script ...
- JAVA项目中引用Logback的方法
一.简介 本文主要讲JAVA项目中引入Logback的方法. 二.解决 1.引入依赖. <!--Begin LogBack Log--> <!-- https://mvnreposi ...
- Hierarchical softmax(分层softmax)简单描述.
最近在做分布式模型实现时,使用到了这个函数. 可以说非常体验非常的好. 速度非常快,效果和softmax差不多. 我们知道softmax在求解的时候,它的时间复杂度和我们的词表总量V一样O(V),是性 ...
- mybatis插入一个对象后获取表中自增的主键Id并且传入到插入的的对象中,方便将对象中其他属性赋值给其他以前表主键Id作为非空字段的表
原本的sql语句为: <insert id="xx" parameterType="com.hrt.partner.model.ShopInsert"&g ...
- redis学习 (key)键,Python操作redis 键 (二)
# -*- coding: utf-8 -*- import redis #这个redis 连接不能用,请根据自己的需要修改 r =redis.Redis(host=") 1. delete ...
- kubernetes 学习资料
谷歌大神详解 Kubernetes 配置管理最佳方法 https://www.kubernetes.org.cn/3031.html all in on kubernetes https://gith ...
- tensorflow 笔记14:tf.expand_dims和tf.squeeze函数
tf.expand_dims和tf.squeeze函数 一.tf.expand_dims() Function tf.expand_dims(input, axis=None, name=None, ...
- window10下TensorFlow-gpu环境搭建
安装python 下载python3.5.4 https://www.python.org/downloads/release/python-354/ 选择Windows x86-64 executa ...