zoukankan      html  css  js  c++  java
  • Fence Repair POJ

    题意:给出一段无限长的棍子,切一刀需要的代价是棍子的总长,例如21切一刀 变成什么长度 都是代价21 列如7切成5 和2 也是代价7
    题解:可以利用霍夫曼编码的思想 短的棍子就放在底层 长的尽量切少一次 直接用优先队列 取前2个和一个然后代价加起来就好 有一个
    小trick就是 只有一个棍子的时候要特判 还有sum要开Long long 

    #include<vector>
    #include<cstdio>
    #include<iostream>
    #include<queue>
    using namespace std;
    int main(){
        int n;
        while(cin>>n){
        priority_queue<int ,vector<int>,greater<int > >q;
            for(int i=0;i<n;i++){
                int temp;
                scanf("%d",&temp);
                q.push(temp);
            }
        long long  sum=0;
        if(q.size()==1){
            cout<<q.top()<<endl;
            q.pop();
        }
        while(q.size()>1){
            int temp1=q.top();q.pop();
            int temp2=q.top();q.pop();
            sum+=temp1+temp2;
            q.push(temp1+temp2);
        }
        cout<<sum<<endl;
        }
        return 0;
    }
  • 相关阅读:
    莫队专题
    AJAX XML 实例
    AJAX 简介
    AJAX 服务器响应
    AJAX 创建XMLHttpRequest 对象
    AJAX 教程
    AJAX 向服务器发送请求
    AJAX onreadystatechange 事件
    AJAX ASP/PHP 请求实例
    让卖场的死角“起死回生”
  • 原文地址:https://www.cnblogs.com/ttttttttrx/p/9995116.html
Copyright © 2011-2022 走看看