题目

Description
小Y:“小R 你是萝莉控吗。”小R:“…”
为了避免这个尴尬的话题,小R 决定给小Y 做一道题。
有一个长度为n 的正整数数组A,满足Ai >= Ai+1,现在构造一个数组B,令Bi =。
现在,有一个n * n 的网格图,左下角坐标是(1, 1),右上角坐标是(n, n)。有一个小SB正在坐标为(n, 1) 的位置,每一时刻,如果他现在在(x, y),他可以选择走到(x ?-1,y + 1) 或者(x, (y + 1) div 2),如果选择后者,他要支付Bx的代价。
现在他想走到(1, 1),你可以告诉他他支付的代价最少是多少吗?注意在任何时候他都不能离开这个网格图。

Input
第一行输入一个正整数T 表示数据组数。
对于每组数据,第一行是一个整数n,接下来一行n 个整数表示数组A。

Output
对于每组数据,输出一个整数表示答案。


解题思路

这个问题的答案就是数组 A 中所有元素的哈夫曼树的权值。
因为数组是有序的,所以在哈夫曼树中的深度一定是单调不减的。我们考虑每一个位置,
把 f(i,j) 看成现在已经放入了下标比 i 小的所有节点,剩余的叶子节点有 j 个。那么我们每一次
有两种选择,第一种是把所有叶子节点都扩展出两个后继,这时剩下所有节点的深度都增加了
1,所以付出的代价是 ∑k=i+1nAk\sum_{k=i+1}^{n}A_{k}∑k=i+1n​Ak​,状态变成了 f(2i,j);第二种是把第 i 个数填在一个叶子上,这
时状态变成了 f(i+1,j−1)。最终的答案就是 min(fn+1,k)(k > 0)。


代码合并果子

#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
ll T,n,num,u,ans,a[200010];
void up(ll x)
{ll t; while (x>1&&a[x]<a[x/2]) {t=a[x/2]; a[x/2]=a[x]; a[x]=t; x/=2; }
}
void down(ll x)
{ll y,t; while ((a[x*2]<a[x]&&x*2<=num)||a[x*2+1]<a[x]&&x*2+1<=num){y=x*2; if (a[y+1]<a[x*2]&&x<=num) y++; t=a[y]; a[y]=a[x]; a[x]=t; x=y; }
}
void insert(ll x)
{num++; a[num]=x; up(num);}
int main()
{scanf("%lld",&T); while (T--){memset(a,0,sizeof(a)); num=0; ans=0; scanf("%lld",&n); for (ll i=1;i<=n;i++){scanf("%lld",&u);insert(u);} while (num!=1) { u=0; u+=a[1]; a[1]=a[num];num--;down(1);u+=a[1];a[1]=a[num];num--;down(1);insert(u);ans+=u; }printf("%lld\n",ans); }
}

[jzoj4210] 【五校联考1day1】我才不是萝莉控呢 {哈夫曼树}相关推荐

  1. jzoj4210. 【五校联考1day1】我才不是萝莉控呢(哈夫曼树)

    题意 50分 转换 正解 后记 题意 有一个(小SB)人要从(n,1)走到(1,1),每次他有两种走法: ①(x−1,y+1)①(x-1,y+1)无损耗 ②⌊(x,(y+1)/2)⌋②⌊(x,(y+1 ...

  2. 【五校联考1day1】我才不是萝莉控呢

    Description 小Y:"小R 你是萝莉控吗."小R:"-" 为了避免这个尴尬的话题,小R 决定给小Y 做一道题. 有一个长度为n 的正整数数组A,满足A ...

  3. JZOJ 4210. 【五校联考1day1】我才不是萝莉控呢

    .. 题目: 分析: 代码: 题目: 传送门 分析: 我们直接放上合并果子的代码,然后怒切...... 好吧,其实是我找不到证明tatata是哈夫曼树的过程,但题解说是合并果子,所以就^ _ ^ 代码 ...

  4. JZOJ Day4 B组 T3【五校联考1day1】我才不是萝莉控呢

    题目大意: 小YYY:"小RRR 你是萝莉控吗."小RRR:"-" 为了避免这个尴尬的话题,小RRR 决定给小YYY 做一道题. 有一个长度为nnn 的正整数数 ...

  5. jzoj(senior)4208. 【五校联考1day1】线段树什么的最讨厌了

    题目链接 题解:反着搜,从[l,r]区间去拓展到其他四个区间[l,2r-l],l,2r-l+1,[2l-r-2,r]2l-r-1,r,然后dfs这四个区间就好啦! #include<cmath& ...

  6. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...

    2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...

  7. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  8. jzoj4230. 【五校联考4day1】淬炼神体(B组——Day3)

    jzoj4230. [五校联考4day1]淬炼神体 题目 Description 王仙女将你提供的答案填在<葵花宝典>上,突然,宝典发出耀眼的白光,一股强大的吸力瞬间将仙女吸入宝典中. 一 ...

  9. 【五校联考2015 9.5】我才不是萝莉控

    题目大意 你在一个n×nn\times n的网格图上,初始站在(1,1)(1, 1)点,要求到达(n,n)(n, n)点. 假如你现在在(x,y)(x, y)点,那么你有两种行走方式. 走到(x+1, ...

最新文章

  1. 【BOOM】一款有趣的Javascript动画效果
  2. 零基础python嵌入式开发_零基础Python入门教程
  3. python列表元组字典相互转化_python中字典元组和列表的互相转化
  4. 微型计算机中被处理信息称为,2011海南省计算机等级考试试题 二级C试题考资料...
  5. java使用枚举做审核_JAVA—枚举
  6. CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了
  7. R语言:网页抓取之get the data
  8. lvgl 主要文件目录树
  9. NOPI修改xlsx文件内容,无法正常打开,提示文件格式或文件扩展名无效
  10. Unity Obi Cloth 教學
  11. 麦克风里有电流声,杂音怎么办
  12. 记一次变异CC攻击解析
  13. 电脑怎么查看蓝牙版本
  14. 中国各阶级收入统计表,看看你在哪个阶级
  15. CSS 重构:样式表性能调优
  16. 嗨,我的技术论坛上线啦!
  17. 软件工程专业毕业生的就业前景如何,如何扩展自身的就业空间
  18. Unity游戏开发之绘制准心
  19. 云与海计算机谱,天谕乐谱代码云与海-天谕手游云与海乐谱代码分享-沧浪手游...
  20. 初学者一学就会的小程序开发——推箱子

热门文章

  1. LaTex:有关LaTex的入门、语法使用
  2. 具有立体效果的地图制作
  3. 大数据早报:搜狐《数字之道》,召唤新势力 十一数据观:钱和人都去哪了?(10.10)
  4. 关于 ‘else‘ without a previous ‘if‘错误
  5. Abaqus idle 3600 seconds问题解决
  6. ICLR 2023 | 厦大港大提出MRM:利用视觉+语言数据增强视觉特征
  7. 计算机网络8 互联网上的音视频服务
  8. mariadb(mysql)[详解]
  9. Linux shell 脚本编程-实战篇(三)
  10. 基于51单片机的智能遥控晾衣架温度湿度光强检测proteus仿真原理图PCB