zoukankan      html  css  js  c++  java
  • 洛谷 P1334 瑞瑞的木板

    题目描述

    瑞瑞想要亲自修复在他的一个小牧场周围的围栏。他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每根的长度为整数Li(1≤Li≤50,000)。于是,他神奇地买了一根足够长的木板,长度为所需的N根木板的长度的总和,他决定将这根木板切成所需的N根木板。(瑞瑞在切割木板时不会产生木屑,不需考虑切割时损耗的长度)瑞瑞切割木板时使用的是一种特殊的方式,这种方式在将一根长度为x的模板切为两根时,需要消耗x个单位的能量。瑞瑞拥有无尽的能量,但现在提倡节约能量,所以作为榜样,他决定尽可能节约能量。显然,总共需要切割N-1次,问题是,每次应该怎么切呢?请编程计算最少需要消耗的能量总和。

    输入输出格式

    输入格式:

     

    第一行: 整数N,表示所需木板的数量

    第2到N+1行: 每行为一个整数,表示一块木板的长度

     

    输出格式:

     

    一个整数,表示最少需要消耗的能量总和

     

    输入输出样例

    输入样例#1: 复制
    3
    8
    5
    8
    
    输出样例#1: 复制
    34
    

    说明

    将长度为21的木板,第一次切割为长度为8和长度为13的,消耗21个单位的能量,第二次将长度为13的木板切割为长度为5和8的,消耗13个单位的能量,共消耗34个单位的能量,是消耗能量最小的方案。

    思路:优先队列的贪心。

    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define LL long long
    using namespace std;
    int n;
    LL t,ans=0;
    priority_queue<LL, vector<LL>, greater<LL> > q;
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%lld",&t);
            q.push(t);
        }
        for(int i=1;i<n;i++){
            int x=q.top();q.pop();
            int y=q.top();q.pop();
            x+=y;ans+=x;
            q.push(x);
        }
        cout<<ans<<endl;
        return 0;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    重构区块链
    区块链隐私保护技术简单介绍
    Extmail邮件过滤和杀毒
    关于Python的JSON
    关于Python的JSON
    关于Python的JSON
    Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机
    Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机
    Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机
    Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7896455.html
Copyright © 2011-2022 走看看