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

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

Sample Input

131 1 1

Sample Output

5样例解释:选择的路径可以是:(3, 1)->(2, 2)->(2, 1)->(1, 2)->(1, 1)

Data Constraint

对于30% 的数据,n <= 10
对于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 我才不是萝莉控呢相关推荐

  1. 【哈夫曼树】JZOJ_4210 我才不是萝莉控呢

    题意 现在,有一个n∗nn * nn∗n的网格图,左下角坐标是(1,1)(1, 1)(1,1),右上角坐标是(n,n)(n, n)(n,n).有一个小SBSBSB正在坐标为(n,1)(n, 1)(n, ...

  2. 赫夫曼树介绍、赫夫曼树的性质、赫夫曼编码、赫夫曼树与赫夫曼编码的应用

    文章目录 赫夫曼树 1. 赫夫曼树介绍: 2. 赫夫曼树的创建过程: 3. 赫夫曼树的性质: 4. 赫夫曼编码: 5. 赫夫曼树与赫夫曼编码的c语言代码实现: 赫夫曼树 1. 赫夫曼树介绍: ​ 赫夫 ...

  3. [哈夫曼树][堆]JZOJ 4210 我才不是萝莉控呢qaq

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

  4. 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)( ...

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

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

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

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

  7. 三十、赫夫曼树的设计与代码实现

    一.基本介绍 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为 最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍 ...

  8. 赫夫曼树建立c语言源程序编译结果详细解释,c语言构建哈夫曼树(附运行结果图)[本站推荐]...

    #include#include#include int m,s1,s2; typedef struct { unsigned int weight; unsigned int parent,lchi ...

  9. Java数据结构和算法:哈夫曼树

    本章介绍哈夫曼树.和以往一样,本文会先对哈夫曼树的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可.若 ...

最新文章

  1. 学习深度网络需要直观的感知
  2. Regex Tester (免费有用)
  3. 查看ios设备型号网址
  4. Python高级爬虫实战,JS解密咪咕音乐登录参数分析
  5. [笔记]TB-6S-LX150T-IMG2_HWUserManual_1.02e实例讲解
  6. 赛锐信息:集团化公司SAP权限管控解决方案
  7. 第四篇 做一个用户登录之后查看学员信息的小例子
  8. OpenBSD 将迎来原生的 Hypervisor
  9. android浏览器资源嗅探,GitHub - icemanyandy/VBrowser-Android: 全网视频嗅探缓存APP
  10. iOS 获取权限描述本地化
  11. highcharts去水印方法
  12. Android 自定义圆角TextView控件 带边框 非shape
  13. android9 三星 港版,三星S9官方港版安卓9固件系统升级更新包:TGY-G9600ZHU5CSFB
  14. typora问题解决:This beta version of Typora is expired
  15. 第二类曲线、曲面积分计算公式
  16. 关于睡眠检测自定义VIEW
  17. 日历程序,支持添加日程提醒
  18. 在网络中 计算机输出的信号是,2019陕西国家电网校园招聘计算机类笔试:计算机网络自测四...
  19. 娱乐万岁,躺平无罪!聊点有技术含量的
  20. ACCP6.0 教程课件,可用

热门文章

  1. ×××S 2008 实用小技巧
  2. AutoCAD 2021简体中文版
  3. echarts中的世界地图
  4. python2基本数据类型
  5. ASP常用进制转化类(2,8,10,16,32,64)
  6. mui框架中dialog框的实现
  7. 55.Jump Game
  8. push_heap算法 (即满足max-heap条件,最大值在根节点)
  9. ajax 省市级联项目中的实现
  10. Nodejs介绍及其安装