题解 | #[NOIP2004]合并果子#

[NOIP2004]合并果子

https://ac.nowcoder.com/acm/problem/16663

链接:https://ac.nowcoder.com/acm/problem/16663
来源:牛客网

题目描述

    每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。

    因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。

例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。

输入描述:

输入包括两行,第一行是一个整数n(1<=n<=10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1<=ai<=20000)是第i种果子的数目。 

输出描述:

输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于231。
注:选这道题记录一下自己刚学priority_queue的练习awa(话说大一上快期末了才学这个是不是太晚了qwq)
注意:用蓝色DevC++(即DevC++5.11的兄弟们,在用unordered_map,to_string,auto,priority_queue这些函数时,如果在编译时遇到这些函数用不了的情况时,依次点上面栏里的工具--编译选项--编译器,把”编译时加入以下命令“这一选项勾上,然后在下面填入-std=c++11(不要带空格!),最后点确定就行了,之后就能用这些函数了)
这道题由于数据量不大,所以不用priority_queue也能过
不用priority_queue的代码:
#include<stdio.h>
#include<bits/stdc++.h>
#define ll long long int
ll s[10020];
using namespace std;
int main(){
    ll n,i,ans=0;
    scanf("%lld",&n);
    for(i=1;i<=n;i++){
        scanf("%lld",&s[i]);
    }
    for(i=1;i<=n-1;i++){
        sort(s+i,s+n+1); //没有cmp函数,默认为升序排序
        s[i+1]+=s[i];//将最小的两个数相加
        ans+=s[i+1];
    }
    printf("%lld\n",ans);
    return 0;
}
(其实不用开long long int 也能过哦)
时间:750ms左右

用priority_queue的代码:
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,i,tmp,t,ans=0;
    priority_queue<int,vector<int>,greater<int>>que;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&t);
        que.push(t);
    }
    for(i=1;i<=n-1;i++){
        tmp=que.top();//找出最小堆中的开头的元素(即最小值)
        que.pop();//弹出最小值(即删去最小值)
        tmp+=que.top();//找出目前最小堆中的开头的元素(即最小值)
        que.pop();//弹出最小值(即删去最小值)
        ans+=tmp;
        que.push(tmp);//将两个值相加再存入最小堆中(会自动插入到合适的位置的(超赞))
    }
    printf("%d\n",ans);
    return 0;
}
时间:6ms左右

看得出来priority_queue在做关于并查集的题目时十分的好用 : )


这是本人对于算法入门班共十三章习题的题解与个人的一些感悟,本人写题解的目的是对于某些经典的/陌生的/无从下手的/思维方向错误的题目加深印象。 希望自己能够在学习算法的路上走得更远,今天也是努力学习的一天!

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务