牛客国庆集训派对Day2 F、平衡二叉树 【构造+记忆化搜索】
任意门:https://www.nowcoder.com/acm/contest/202/F
空间限制:C/C++ 1048576K,其他语言2097152K
64bit IO Format: %lld
题目描述
给定平衡的定义参数d, 你需要求出所有高度为 n 的平衡树中不平衡度的最大值。
输入描述:
两个整数,n, d.
输出描述:
一个整数:所有高度为 n 的平衡树中不平衡度的最大值。
备注:
0 ≤ n, d ≤ 60
题意概括:
不要被题目蒙骗了,这是一道找规律和构造的题目。
tip:注意是所有左右子树的高度差为 d,不平衡度也是所有左右子树比较后的最大的那个。
解题思路:
思路很清晰嘛,第一个左结点为根的子树为满二叉树,第一个右结点的子树以尽量少的结点数构成一颗满足条件的二叉树,答案为这两颗子树的结点之差。
第一个左子树为满二叉树,左子树结点数 2^(N-1)-1; (快速幂)
那右边的那一半呢就进行构造建树吧,具体实现为 dfs ,每次构造它的左子树和右子树,直到达到需要的高度。但是一开始纯dfs是肯定超时,这时候需要记忆化搜索优化一下。
AC code:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define LL long long
using namespace std;
LL dp[][];
int N,d; LL dfs(int h, int step)
{
if(dp[h][step] != -) return dp[h][step];
LL sum = 1LL;
if(step == h) {dp[h][step] = sum; return sum;}
sum += dfs(h, step+); //左子树
if(step >= h-d) {dp[h][step] = sum; return sum;}
sum += dfs(h-d, step+); //右子树
dp[h][step] = sum;
return sum;
} LL qpow(int x, int n)
{
LL ans = , base = x;
while(n != ){
if(n&!=) ans*=base;
base*=base;
n>>=;
}
return ans;
} int main()
{
//d = 1;
//printf("%d\n", dfs(3, 1));
LL L, R;
//while(~scanf("%lld%lld", &N, &d)){
scanf("%d%d", &N, &d);
memset(dp, -, sizeof(dp));
if(N == || d == ) L = , R = ;
else{
L = qpow(, N-)-;
if(d >= N- ) R = ;
else R = dfs(N-d, );
}
//printf("L:%lld R:%lld\n", L, R);
printf("%lld\n", L-R);
//}
return ;
}
牛客国庆集训派对Day2 F、平衡二叉树 【构造+记忆化搜索】的更多相关文章
- 牛客国庆集训派对Day2 Solution
A 矩阵乘法 思路: 1° 牛客机器太快了,暴力能过. #include <bits/stdc++.h> using namespace std; #define N 5000 in ...
- 2019牛客国庆集训派对day2
A(模拟): #include <bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; const double ...
- 牛客国庆集训派对Day2
题目链接:https://www.nowcoder.com/acm/contest/202/A A 题意:给出最大4096*64和64*4096的矩阵,其中有一个矩阵只含有0和1,问你它们相乘所得到得 ...
- 牛客国庆集训派对Day2 H 期望
小贝喜欢玩卡牌游戏.某个游戏体系中共有N种卡牌,其中M种是稀有的.小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝.普通卡可能多次出现,而稀有卡牌不会被重复抽到.小 ...
- 图论+思维(2019牛客国庆集训派对day2)
题意:https://ac.nowcoder.com/acm/contest/1107/J n个点的完全图编号0-n-1,第i个点的权值为2^i,原先是先手选取一些边,然后后手选取一些点,满足先手选取 ...
- 牛客国庆集训派对Day6 A Birthday 费用流
牛客国庆集训派对Day6 A Birthday:https://www.nowcoder.com/acm/contest/206/A 题意: 恬恬的生日临近了.宇扬给她准备了一个蛋糕. 正如往常一样, ...
- 2019牛客国庆集训派对day5
2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...
- 2019牛客国庆集训派对day1(A, B E F K)
链接:https://ac.nowcoder.com/acm/contest/1099#question A:可知符合条件的图中间肯定存在一个由1构成的矩形,找到由1构成矩形的边界,判断出现的1的数量 ...
- 牛客国庆集训派对Day1 L New Game!(堆优化dijkstra+建图)
链接:https://ac.nowcoder.com/acm/contest/201/L来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言2097 ...
随机推荐
- elastic 集群安装
Elastic Search 安装和配置 1.下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6. ...
- How to Setup a Private Proxy Server on EC2 in Under 10 Minutes
How to Setup a Private Proxy Server on EC2 in Under 10 Minutes I’ve been slacking a bit with regular ...
- nyoj 1205——简单问题——————【技巧题】
简单问题 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你一个n*m的矩阵,其中的元素每一行从左到右按递增顺序排序,每一列从上到下按递增顺序排序,然后给你一些数x ...
- ubuntu系统操作
给ubuntu配置解析主机名 vim /etc/hosts 192.168.23.44 Evelyn
- jrebel + myeclipse 实现热部署
1.什么是jrebel JRebel是一套JavaEE开发工具.JRebel允许开发团队在有限的时间内完成更多的任务修正更多的问题,发布更高质量的软件产品. JRebel是收费软件. Jrebel 可 ...
- Redis的Publish/Subscribe
Publish/Subscribe 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布 ...
- hdu 1255 矩形覆盖面积(面积交)
http://www.cnblogs.com/scau20110726/archive/2013/04/14/3020998.html 面积交和面积并基本上差不多.在面积并里,len[]记录的是覆盖一 ...
- Csharp:asp.net CheckBoxList databind
/// <summary> /// CheckBoxList數據源 /// 塗聚文 /// 20130705 /// /// </summary> private void s ...
- B树索引学习
https://blog.csdn.net/wl044090432/article/details/53423333
- python 初识
一.Python介绍 Python简介 Python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...