luoguP1090合并果子

来源:互联网 发布:视频 软件解码器 编辑:程序博客网 时间:2024/05/16 06:07

解决方案:

1.一看就是贪心(有本事用动归还不超时)

2.每次调最小的两个合并(不要问证明)

3.所以用优先队列,懒得手打(P党www)

4.小根堆和大根堆都差不多,选一个用吧

5.AC 奉上代码

#include<iostream>#include<cstdlib>#include<queue>using namespace std;priority_queue<int,vector<int>,greater<int> >q;int n,ans;int a[1000001];int main(){    cin>>n;    for(int i=1;i<=n;i++)cin>>a[i],q.push(a[i]);    while(n-1)    {        int x=0;        x+=q.top();        q.pop();        x+=q.top();        q.pop();        ans+=x;        q.push(x);        n--;    }    cout<<ans;    return 0;

}//小根堆

#include<iostream>#include<cstdlib>#include<queue>using namespace std;priority_queue<int,vector<int>,greater<int> >q;int n,ans;int a[1000001];int main(){    cin>>n;    for(int i=1;i<=n;i++)cin>>a[i],q.push(a[i]);    while(n-1)    {        int x=0;        x+=q.top();        q.pop();        x+=q.top();        q.pop();        ans+=x;        q.push(x);        n--;    }    cout<<ans;    return 0;

}//大根堆

原创粉丝点击