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

POJ 3253 Fence Repair 贪心+优先队列

时间:2016-08-05 13:50:13      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

题意:农夫要将板割成n块,长度分别为L1,L2,...Ln。每次切断木板的花费为这块板的长度,问最小花费。21 分为 5 8 8三部分。
 
思路:思考将n部分进行n-1次两两合成最终合成L长度和题目所求花费一致。贪心,按木板长度排序,每次取长度最小的两块木板,则答案最小。因为合成次数是固定不变的,尽量让小的部分进行多次合成,这样总花费最小。
 
#include<cstdio>
#include<queue>
using namespace std;
typedef long long ll;
priority_queue<int,vector<int>,greater<int> > que;
int main() {
    int n,x;
    while(~scanf("%d",&n)) {
        while(!que.empty()) que.pop();
        for(int i=0;i<n;i++) {
            scanf("%d",&x);
            que.push(x);
        }
        int a,b;ll res=0;
        while(que.size()>1) {
            a=que.top();que.pop();
            b=que.top();que.pop();
            res+=a+b;
            que.push(a+b);
        }
        printf("%lld\n",res);
    }
    return 0; 
} 

 

POJ 3253 Fence Repair 贪心+优先队列

标签:

原文地址:http://www.cnblogs.com/LinesYao/p/5740863.html

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