poj3253-贪心选择

来源:互联网 发布:seo教程 百度云 编辑:程序博客网 时间:2024/06/06 09:19
/*por3242-Fence Repair题目大意:给定一个木条,锯成指定要求的长度,每锯一次花费是被锯成的两段长度之和。求最小的花费。解题思路:将小木条合并成一个大木条,贪心。每次都选取最小的长度合并。求最小的时候用优先队列。*/#include <cstdio>#include <queue>#include <vector>#include <iostream>#pragma warning(disable:4996)using namespace std;//最小堆的比较函数struct cmp {    bool operator()(const int &a, const int &b)    {        return a > b;    }};int main(){    freopen("poj3252.txt", "r", stdin);    int n = 0;    long long sum = 0;    priority_queue<int, vector<int>, cmp> q;    scanf("%d", &n);    int tmp = 0;    while (n--)    {        scanf("%d", &tmp);        q.push(tmp);    }    int a, b;    while (1 != q.size())    {        a = q.top();        q.pop();        b = q.top();        q.pop();        q.push(a + b);        sum += ((long long)a + b);    }    printf("%lld\n", sum);    return 0;}
0 0