[哈夫曼树] Jzoj P4210 我才不是萝莉控呢
Description
为了避免这个尴尬的话题,小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
对于每组数据,第一行是一个整数n,接下来一行n 个整数表示数组A。
Output
Sample Input
131 1 1
Sample Output
5样例解释:选择的路径可以是:(3, 1)->(2, 2)->(2, 1)->(1, 2)->(1, 1)
Data Constraint
对于50% 的数据,n <=1000
对于100% 的数据,n<= 10^5,1 <= T<= 10,1 <= Ai<= 10^4
题解
- 题目大意:当前有个小SB在(n,1)然后他要走到(1,1),他可以选择两种走法,一种是走到(x+1,y-1)不需要代价,一种是走到(x,(y+1)/2)需要代价,问他需要的最小代价是多少
- 这种题一眼看到一般就是dp或这是最短路径问题
- 50%:显然可以用dp来做,设f[i][j]为走到(i,j)的最小代价
- 那么就有两种转移情况,不过这dp要倒着做,不然可以考虑跑多几次
- 100%:数组是有序的,所以在哈夫曼树上深度是递增不减
- 那么我们可以设f[i][j]为现在放入了下标比 i 小的所有节点,剩余的叶子节点有 j 个
- 按照题目我们就有两种情况可以走
- ①F[i+1][j−1],表示在剩下可放的节点中选一个来放第(i+1)个,不需要代价
- ②F[i][j∗2]+Σa[i+1][n],表示把剩下的j个叶子节点往下再扩展2个节点,需要为代价就是后缀和
- 其实就是50分的dp逆做,然后答案就是哈夫曼树的最小权值
- (其实这题就是合并果子,合并果子也是哈夫曼树求最小权值)
- 直接用优先队列做就好了
代码
1 #include <iostream> 2 #include <queue> 3 #include <cstdio> 4 using namespace std; 5 int T,n; 6 long long ans; 7 priority_queue<int,vector<int>,greater<int> >Q; 8 int main() 9 { 10 scanf("%d",&T); 11 while (T--) 12 { 13 scanf("%d",&n),ans=0; 14 for (int i=1,x;i<=n;i++) scanf("%d",&x),Q.push(x); 15 for (int i=n,x;i>1;i--) x=Q.top(),Q.pop(),x+=Q.top(),Q.pop(),ans+=x,Q.push(x); 16 printf("%lld\n",ans); 17 while (!Q.empty()) Q.pop(); 18 } 19 }
转载于:https://www.cnblogs.com/Comfortable/p/10299402.html
[哈夫曼树] Jzoj P4210 我才不是萝莉控呢相关推荐
- 【哈夫曼树】JZOJ_4210 我才不是萝莉控呢
题意 现在,有一个n∗nn * nn∗n的网格图,左下角坐标是(1,1)(1, 1)(1,1),右上角坐标是(n,n)(n, n)(n,n).有一个小SBSBSB正在坐标为(n,1)(n, 1)(n, ...
- 赫夫曼树介绍、赫夫曼树的性质、赫夫曼编码、赫夫曼树与赫夫曼编码的应用
文章目录 赫夫曼树 1. 赫夫曼树介绍: 2. 赫夫曼树的创建过程: 3. 赫夫曼树的性质: 4. 赫夫曼编码: 5. 赫夫曼树与赫夫曼编码的c语言代码实现: 赫夫曼树 1. 赫夫曼树介绍: 赫夫 ...
- [哈夫曼树][堆]JZOJ 4210 我才不是萝莉控呢qaq
Description 小Y:"小R 你是萝莉控吗."小R:"..." 为了避免这个尴尬的话题,小R 决定给小Y 做一道题. 有一个长度为n 的正整数数组A,满 ...
- jozj4010-我才不是萝莉控呢【哈夫曼树】
正题 题目大意 从(n,1)(n,1)(n,1)到(1,1)(1,1)(1,1),一个数组AAA,满足Ai≥Ai+1A_i\geq A_i+1Ai≥Ai+1 每次有两个选择走到(x−1,y+1)( ...
- [jzoj4210] 【五校联考1day1】我才不是萝莉控呢 {哈夫曼树}
题目 Description 小Y:"小R 你是萝莉控吗."小R:"-" 为了避免这个尴尬的话题,小R 决定给小Y 做一道题. 有一个长度为n 的正整数数组A, ...
- jzoj4210. 【五校联考1day1】我才不是萝莉控呢(哈夫曼树)
题意 50分 转换 正解 后记 题意 有一个(小SB)人要从(n,1)走到(1,1),每次他有两种走法: ①(x−1,y+1)①(x-1,y+1)无损耗 ②⌊(x,(y+1)/2)⌋②⌊(x,(y+1 ...
- 三十、赫夫曼树的设计与代码实现
一.基本介绍 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为 最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍 ...
- 赫夫曼树建立c语言源程序编译结果详细解释,c语言构建哈夫曼树(附运行结果图)[本站推荐]...
#include#include#include int m,s1,s2; typedef struct { unsigned int weight; unsigned int parent,lchi ...
- Java数据结构和算法:哈夫曼树
本章介绍哈夫曼树.和以往一样,本文会先对哈夫曼树的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可.若 ...
最新文章
- 学习深度网络需要直观的感知
- Regex Tester (免费有用)
- 查看ios设备型号网址
- Python高级爬虫实战,JS解密咪咕音乐登录参数分析
- [笔记]TB-6S-LX150T-IMG2_HWUserManual_1.02e实例讲解
- 赛锐信息:集团化公司SAP权限管控解决方案
- 第四篇 做一个用户登录之后查看学员信息的小例子
- OpenBSD 将迎来原生的 Hypervisor
- android浏览器资源嗅探,GitHub - icemanyandy/VBrowser-Android: 全网视频嗅探缓存APP
- iOS 获取权限描述本地化
- highcharts去水印方法
- Android 自定义圆角TextView控件 带边框 非shape
- android9 三星 港版,三星S9官方港版安卓9固件系统升级更新包:TGY-G9600ZHU5CSFB
- typora问题解决:This beta version of Typora is expired
- 第二类曲线、曲面积分计算公式
- 关于睡眠检测自定义VIEW
- 日历程序,支持添加日程提醒
- 在网络中 计算机输出的信号是,2019陕西国家电网校园招聘计算机类笔试:计算机网络自测四...
- 娱乐万岁,躺平无罪!聊点有技术含量的
- ACCP6.0 教程课件,可用