牛客国庆集训派对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 ...
随机推荐
- vue中遇到的坑 --- 变化检测问题(数组相关)
最近在项目中遇到了一个问题,不知道为什么,所以最后通过动手做demo实践.查文档的方式解决了,这里做一个总结. 例1 <!DOCTYPE html> <html lang=" ...
- query的参数解析
SQLiteDatabase dbInstance;Cursor cursor = dbInstance.query(String table,String []Columns, String sel ...
- TOJ 2814 Light Bulb
Description Compared to wildleopard's wealthiness, his brother mildleopard is rather poor. His house ...
- Unity3d Attribute 总结
举两个例子,在变量上使用[SerializeFiled]属性,可以强制让变量进行序列化,可以在Unity的Editor上进行赋值. 在Class上使用[RequireComponent]属性,就会在C ...
- 图像文字识别(OCR)用什么算法小结
说明:主要考虑深度学习的方法,传统的方法不在考虑范围之内. 1.文字识别步骤 1.1detection:找到有文字的区域(proposal). 1.2classification:识别区域中的文字. ...
- 小程序中搜索文件,阅览pdf,分享文件链接,评论表情符号
小程序中搜索文件,阅览pdf,分享文件链接,评论表情符号 https://blog.csdn.net/hotqin888/article/details/84111389 小程序中打开网页和pdf h ...
- BulletedList项目控件基础CSS基础
呈现形态&控件语法: <ul id=“...”> <li></li> . <li></li> . <li></li ...
- .net使用redis入门笔记
1.学习blog:http://www.cnblogs.com/yangecnu/p/Introduct-Redis-in-DotNET.html 2.redis官网:http://redis.io/ ...
- python学习(三)--跟着例子写的贴吧网页爬取
from urllib import requestimport urllib #爬贴吧网页文件到本地.首先在本地打开百度贴吧 搜索 java吧#第一页的内容是:http://tieba.baidu. ...
- Jmeter压力测试入门操作
Jmeter压力测试入门 1. 前言 Jmeter 是Apache组织开发的基于Java的压力测试工具,开源并且支持多个操作系统,是一款很好的HTTP测试工具.本篇文章主要的目的是帮助没有接触过J ...