您的位置:首页 > 其它

51nod 1117聪明的木匠-贪心算法

2017-12-05 19:59 513 查看
题目链接:1117

典型的贪心算法

不去考虑怎么切木材,考虑怎么把所有切好的木材拼成原来的整根木头。可以发现每次拼木头时剩下的木头数量减少1(两段拼好后变一段然后放回),也就是总共会拼接N-1次,每次花费的体力是两截木头的长度,只要保证每次拼接的是剩余木头中长度最短的两截就能保证花费最少。

借助优先队列实现。

代码:

#include<iostream>
#include<queue>
using namespace std;

int main(){
priority_queue<long long,vector<long long>,greater<long long> > q;
long long n,u,v,ans=0;
cin>>n;
while(n--){
cin>>u;
q.push(u);
}
while(q.size()>1){
u=q.top();q.pop();
v=q.top();q.pop();
ans+=u+v;
q.push(u+v);
}
cout<<ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: