首页 > 其他分享 >洛谷题单指南-贪心-P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

洛谷题单指南-贪心-P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

时间:2024-02-22 17:24:48浏览次数:32  
标签:NOIP2004 Repair Fence 果子 int sum 合并 P1090 贪心

原题链接:https://www.luogu.com.cn/problem/P1090

题意解读:两两合并,是典型的哈夫曼编码算法思想,贪心即可。

解题思路:

要是合并体力消耗最少,就要让尽可能少的果子越晚合并越好,

因此,贪心策略为优先选择数量最少的两堆果子合并,一直到剩下一堆果子,把合并过程中的消耗值累加即可,

要快速选择最小的两个数,可以借助于优先队列。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 10005;

priority_queue<int, vector<int>, greater<int> > q;
int n, ans;

int main()
{
    cin >> n;
    int x;
    for(int i = 1; i <= n; i++) cin >> x, q.push(x);

    while(q.size() >= 2)
    {
        int a = q.top(); q.pop();
        int b = q.top(); q.pop();
        int sum = a + b;
        q.push(sum);
        ans += sum;
    }
    
    cout << ans;

    return 0;
}

 

标签:NOIP2004,Repair,Fence,果子,int,sum,合并,P1090,贪心
From: https://www.cnblogs.com/jcwy/p/18027778

相关文章

  • P1088 [NOIP2004 普及组] 火星人
    [NOIP2004普及组]火星人题目描述人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小......
  • 洛谷题单指南-暴力枚举-P1088 [NOIP2004 普及组] 火星人
    原题链接:https://www.luogu.com.cn/problem/P1088题意解读:火星人的手指可以通过全排列来表示数字,全排列由小到大的顺序即为表示的数字大小,题目可以转化为:给定按顺序全排列中的某一个排列,求往后数m个排列的内容。解题思路:此题与经典全排列问题的差异在于,需要从指定一个排列开......
  • CF349B Color the Fence 题解 贪心
    贪心题意:你一共有\(v\)元,给你数字\(1\)~\(9\)的价值,求出你能够买下的数字组成的最大数。思路首先,我们知道能够买下的数字个数越多,组成数字的位数就越多,结果自然就越大,那么,根据贪心策略,我们可以先全买价格最便宜的数字(相同价格时,自然买更大的)。参考代码:intv;cin>>v;......
  • Table '.\mysql\proc' is marked as crashed and should be repaired 报错
    Table'.\MySQL\proc'ismarkedascrashedandshouldberepaired报错 解决方法:找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:myisamchk-c-r../data/mysql/proc.MYI然后myisamchk工具会帮助你恢复数据表的索引。重新启动mysql,问题解决。......
  • .[[email protected]].faust勒索软件深度解析与防护策略
    一、引言在数字化时代,计算机恶意软件已经成为网络安全领域的一大威胁。其中,勒索恶意软件以其独特的加密手段和恶意勒索行为,给用户带来了巨大的经济损失和数据安全风险。.[[email protected]].faust勒索恶意软件作为其中的一种,近年来频繁出现,给全球范围内的用户带来了严重的困......
  • [ABC325G] offence
    题意给定一个长度为\(n\)字符串以及一个数\(f\),你可以执行以下操作任意次,求最终字符串长度的最小值。在字符串中选择一个连续的of,删掉它以及它后面的\(i\)个字符,\(0\lei\lef\)。数据范围:\(n\le300\)。思路看到数据范围以及字符串中间的删除可以想到区间dp。......
  • ABC325G offence 题解
    给出一个长为\(n\)的字符串和非负整数\(k\)。你可以进行以下操作若干次,使得最终字符串长度最小。选择一个字串of。然后删掉of以及这之后的\(i\)个字符。\(i\)由你决定,但要满足\(0\leqi\leqk\)。输出这个最小长度。\(1\leqn,k\leq300\)。做完以后感觉很简单。但......
  • 好用的视频修复软件DVR(Digital Video Repair)
    使用EV录屏时进程中止导致已录的视频也打不开,可以试试有录好的小视频可以作为辅助信息提高修复成功率。https://www.risingresearch.com/en/dvr/......
  • P1090 [NOI洛谷P2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
    可以用堆来实现,或者更简单一点的优先队列优先队列:#include<queue>priority_queue<int,vector<int>,greater<int>>q;因为每次合并后,最小的两个值都会更新,所以可以很好的利用优先队列内元素有序的特点,减少因反复排序带来的时间复杂度;一开始我用STL自带的排序sort,报了5个TLE,后来意......
  • P1090 [NOIP2004 提高组] 合并果子
    原题链接题解每次从所有果子堆中选重量最小的两堆并累加,观察到只需要找出最小因此考虑用堆代码#include<bits/stdc++.h>usingnamespacestd;intpile[10005]={0};intlen=0;voidin(intx){pile[++len]=x;intnow=len;while(pile[now]<pile[now/2]......