zoukankan      html  css  js  c++  java
  • poj 3253(贪心)

    http://poj.org/problem?id=3253

    题意:就是一个木头要做成栏杆,所以要进行切割,每一次所需要的费用就等于切割的木头的长度,求最少的费用。

    思路: 这一个是霍夫曼编码的题?我最开始真的没看出来,我一直都以为是贪心,最开始想的也挺简单的。就是减,每次减个最大的木头的长度就可以了,然后WA了几次,我还以为是我的优先队列用错的了,然后用快排写,还是wa,最后还是别人和我说了下他的思路,我才发现我理解是错了,每次切割不一定要切割的是所需的长度中最长的,而应该是把木板切成一块一块,然后再从这一块一块中来切,这样的钱才是最少的。

      1 #include <stdio.h>
      2 #include <string.h>
      3 #include <vector>
      4 #include <queue>
      5 
      6 using namespace std;
      7 int main()
      8 {
      9   //  freopen("in.txt","r",stdin);
     10     priority_queue<int,vector<int>,greater<int> >s;
     11     int n,tmp,tmp1;
     12     long long ans = 0;
     13     scanf("%d",&n);
     14     for(int i=0;i<n;i++)
     15     {
     16         scanf("%d",&tmp);
     17         s.push(tmp);
     18     }
     19 
     20   //  ans += a[0];
     21    for(int i=0;i<n-1;i++)  //对两个最小的进行合并,然后在相加,在入队列,这里不能暴力,会TLE。
     22    {
     23         tmp =s.top();
     24         s.pop();
     25         tmp1=s.top();
     26         s.pop();
     27         ans += tmp+ tmp1;
     28         tmp1 += tmp;
     29         s.push(tmp1);
     30     }
     31     printf("%lld
    ",ans);
     32     return 0;
     33 }
  • 相关阅读:
    深入Python(一)
    深入Python(二)
    初识Python(五)
    初识Python(一)
    深入Python(三)
    一、MongoDB的下载、安装与部署
    浏览器上的javascript
    javascript中的事件
    扩展方法
    团队项目开题报告
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/5747472.html
Copyright © 2011-2022 走看看