DESCRIPTION

给定一个正整数n,现在有n个石头,每个单独成一堆。
现在可以每次合并两堆石头,产生的能量为两堆石头个数的min。
你现在要将所有的石头合并成一堆,并且获得的能量最大。
输出这个最大值。
1 ≤ n ≤ 1e7。

INPUT
第一行是一个正整数T (1 ≤ T ≤ 10)表示数据组数,接下来T行每行一个正整数。数据满足一个测试点中,最多只有1个n超过1e6。
OUTPUT
T行,每行一个正整数。
SAMPLE INPUT
3135
SAMPLE OUTPUT
025

首先是最优策略的选取,如果想获得最大,那么肯定每次合并的两堆石头的价值差最小,那么将所有石头都加入优先队列,每次合并最小两堆即可

思路很好想到,主要是优化;

如果石子堆数是偶数的话,我们可以直接得到合并所能获得的最大价值

如果是奇数,那么将一堆石子入队,又会变为偶数

还有一些细节,具体看代码

#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define wtf printf("wtf\n");
using namespace std;
typedef long long ll;
const int N=1e7+20;
int a[N],n;
priority_queue<int,vector<int>,greater<int> >q;
int main()
{int t;scanf("%d",&t);while(t--){while(!q.empty())q.pop();scanf("%d",&n);int ans=0,m=n,val=1;while(m){while(!q.empty()){int x=q.top();if(m>1&&x<val)//如果这堆石头价值大于优先队列中石头的价值,则有两种合并情况{q.pop();if(!q.empty())//优先队列中有比这堆石头还小的,那么优先队列中两个最小的合并{int y=q.top();if(y<val){q.pop();q.push(x+y);ans+=x;}else//否则优先队列中最小的和这堆石头合并{q.push(x+val);ans+=x;m--;}}else//队列为空,优先队列中最小的和这堆石头合并{q.push(x+val);ans+=x;m--;}}else//没有可以合并的,跳出循环break;}if(m&1){q.push(val);m--;}if(m>0){ans+=m/2*val;m/=2;val<<=1;}}while(!q.empty()){int x=q.top();q.pop();if(q.empty())break;int y=q.top();q.pop();ans+=min(x,y);q.push(x+y);}printf("%d\n",ans);}return 0;
}

“玲珑杯”ACM比赛 Round #23 C -- 你居然不吃巧克力(贪心+优先队列)相关推荐

  1. 玲珑杯”ACM比赛 Round #8-D XJT Loves Boggle(dfs)

    记录一个菜逼的成长.. DESCRIPTION Boggle is a word game designed by Allan Turoff and distributed by Hasbro. It ...

  2. “玲珑杯”ACM比赛 Round #21-C-战舰萝莉(线段树区间更新)

    "玲珑杯"ACM比赛 Round #21 Start Time:2017-09-23 17:00:00 End Time:2017-09-23 19:30:00 Refresh T ...

  3. “玲珑杯”ACM比赛 Round #18 C -- 图论你先敲完模板【Dp】

    C -- 图论你先敲完模板 Time Limit:5s Memory Limit:256MByte Submissions:660Solved:160 DESCRIPTION 今天HHHH在操场上跑步 ...

  4. “玲珑杯”ACM比赛 Round #18 ABC题解

    A -- 计算几何你瞎暴力 Time Limit:5s Memory Limit:256MByte Submissions:1597Solved:301 DESCRIPTION 今天HHHH考完了期末 ...

  5. 玲珑杯”ACM比赛 Round #15 D 咸鱼商店【二分+01背包】

    题目链接:http://www.ifrog.cc/acm/problem/1125 题目大意:中文题目,题意请仔细看题面. 解题思路:二分+01背包     01背包的最终结果与其中的顺序无关,我们要 ...

  6. lonlifeOJ1152 “玲珑杯”ACM比赛 Round #19 概率DP

    E -- Expected value of the expression DESCRIPTION You are given an expression: A0O1A1O2A2⋯OnAnA0O1A1 ...

  7. “玲珑杯”ACM比赛 Round #22 E【贪心】

    题目: http://www.ifrog.cc/acm/problem/1171?contest=1024&no=4 题意: 输入一个字符串,将他重新排列,使得重排之后的字符串的最小表示法,最 ...

  8. “玲珑杯”ACM比赛 Round #24: C. この戦いが終わったら(BFS+bitset优化暴力)

    C -- この戦いが終わったら 给你一个无向图,每次查询的时候给一堆二元组(xi,yi) 求图中有多少个点u与至少一个这次询问给出的二元组(xi,yi)满足dist(u,xi)<=yi,dist ...

  9. “玲珑杯”ACM比赛 Round #19

    A -- A simple math problem Time Limit:2s Memory Limit:128MByte Submissions:1599Solved:270 DESCRIPTIO ...

最新文章

  1. 用GAN创造新蛋白只需几周,大幅缩短制药周期 | Nature子刊
  2. maven私服-详细部署搭建笔记
  3. abap视图字段限制_在 Laravel 控制器中进行表单请求字段验证
  4. (软件工程复习核心重点)第八章面向对象方法学-第三节:面向对象建模之对象模型
  5. 阿里云cloudmonitor服务导致CPU暴增的异常
  6. 贴一段Jenkins的自动发布脚本
  7. jQuery学习笔记(4)-设置元素的属性和样式
  8. 6月8日 Python处理PDF和Word文档常用的方法
  9. ActionForm工作原理
  10. linux迅雷命令行,Linux系统下使用wine运行迅雷5的方法
  11. php 处理eml,php读取eml范例、php解析eml、eml解析成网页
  12. Python爬虫——用正则表达式爬取小说内容
  13. 支持linux的代码审计,linux驱动代码审计经验谈
  14. vs2017下配置Xamarin
  15. Redis-设置过期时间及淘汰策略
  16. R语言-NULL和NA的区别
  17. 隐私计算加密技术基础系列-Diffie–Hellman key exchange
  18. 程序员与公务员之争,到底选啥?
  19. 作业:计数器仿真实验
  20. 【开源电机驱动】H 桥驱动-硬件篇

热门文章

  1. mac电脑强大的解压缩软件BetterZip 5.3.4 for Mac中文版及betterzip怎么压缩
  2. 2021-2027全球与中国电动气控型呼吸机市场现状及未来发展趋势
  3. Python was not found; run without arguments to install from the Microsoft Store, or disable this sho
  4. 基于深度学习方法的声纹识别(Speaker Recognition)论文综述
  5. 基于python的步态分析_基于python实现RFM分析
  6. 如何评审一篇论文?(How to review a paper?)
  7. org.apache.jasper.JasperException: The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be r
  8. 李开复先生的时间管理方法
  9. 单片机程序c语言 汇编语言,C语言能够实现单片机功能,为什么还要使用汇编呢?...
  10. 串口读写SDRAM存储器