Fence Repair

题意:有一个农夫要把一个木板钜成几块给定长度的小木板,每一次费用就是当前锯的这个木板的长度 给定小木板的个数n,各个要求的小木板的长度,,求最小费用

题解:
要费用最小,即每次锯成的两块木板的长度最小(这样他们的和就最小)
用优先队列,比较方便

#include 
#include 
#include 
#include 
using namespace std;
int main()
{  int n,a[20003],i,m1,m2;
long long int sum;
   cin>>n;
    sum=0;
  priority_queue< int ,vector,greater > que;//优先搜素树
  while(!que.empty()) que.pop();
  for(i=0;i1)//哈夫曼树
    {  
        m1=que.top();que.pop();
       m2=que.top();que.pop();
       sum+=(m1+m2);
       que.push(m1+m2);
    }
  cout<

你可能感兴趣的:(贪心算法)