码迷,mamicode.com
首页 > 其他好文 > 详细

【贪心】合并果子

时间:2016-11-12 16:26:33      阅读:363      评论:0      收藏:0      [点我收藏+]

标签:元素   cout   重载运算符   image   bsp   ica   ring   循环   lock   

这是一道非常经常的贪心问题。

题目所遵循的原则就是 把最小的两个元素合并的话 体力消耗最少(抱歉 我不会证明 )

之后的话用优先队列读入所有数(得重载运算符从小到大排),之后每次把队首的元素取出来和后一个元素合并。合并完后再扔进队列,循环n-1次。直到只剩下一堆时

技术分享
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> >Q;    //创建优先对列 greater<int>就是让该队列自动从小(队头)到大(队尾)排序,若改作less<int>则是从大(队头)到小(队尾)。
int N,x,ans=0,tmp=0;
int main()
{
    cin>>N;
    for(int i=1;i<=N;i++)
        {
            cin>>x;
            Q.push(x);    //将果子数入队 它将自动排序
        }
    for(int i=1;i<=N-1;i++)
        {
            tmp=Q.top();    //读取当前最小的一堆
            Q.pop();
            tmp=tmp+Q.top();    //读取当前第二小的一堆与最小的一堆合并
            Q.pop();
            Q.push(tmp);           //将刚刚合并的两堆重新入队,让它再次排序
            ans=ans+tmp;         //统计所用的能量
        }
        cout<<ans;       
return 0;
}
合并果子

 

【贪心】合并果子

标签:元素   cout   重载运算符   image   bsp   ica   ring   循环   lock   

原文地址:http://www.cnblogs.com/OIerLYF/p/6056657.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!