码迷,mamicode.com
首页 > 其他好文 > 详细

poj3253(Fence Repair)

时间:2014-07-26 00:19:16      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   art   

题目地址:Fence Repair

 

题目大意:

    一个农夫有个长度一定的木板,他想切成N段长度一定的木板,每次切割需要一定的费用,这个费用就是当前木板的长度,求切成N段农夫花费最小的费用。

 

解题思路:

    因为每次切割是切成两段,而且要求花费的最少,这样可以逆向思想从最小的两段木板算起,这样加到最后,一定是花费最小的切割。利用的是Huffman思想,但是用的是优先队列,即每次将最小的两段长度优先加和,然后在放进队列里排队,再选取较小的两个,以此类推。

 

代码:

bubuko.com,布布扣
 1 #include <algorithm>
 2 #include <iostream>
 3 #include <sstream>
 4 #include <cstdlib>
 5 #include <cstring>
 6 #include <cstdio>
 7 #include <string>
 8 #include <bitset>
 9 #include <vector>
10 #include <queue>
11 #include <stack>
12 #include <cmath>
13 #include <list>
14 #include <map>
15 #include <set>
16 using namespace std;
17 /***************************************/
18 #define ll long long
19 #define int64 __int64
20 /***************************************/
21 const int INF = 0x7f7f7f7f;
22 const double eps = 1e-8;
23 const double PIE=acos(-1.0);
24 const int d1x[]= {0,-1,0,1};
25 const int d1y[]= {-1,0,1,0};
26 const int d2x[]= {0,-1,0,1};
27 const int d2y[]= {1,0,-1,0};
28 const int fx[]= {-1,-1,-1,0,0,1,1,1};
29 const int fy[]= {-1,0,1,-1,1,-1,0,1};
30 /*vector <int>map[N];map[a].push_back(b);int len=map[v].size();*/
31 /***************************************/
32 void openfile()
33 {
34     freopen("data.in","rb",stdin);
35     freopen("data.out","wb",stdout);
36 }
37 priority_queue<int> qi1;
38 priority_queue<int, vector<int>, greater<int> >qi2;
39 /**********************华丽丽的分割线,以上为模板部分*****************/
40 int main()
41 {
42     int n;
43     while(scanf("%d",&n)!=EOF)
44     {
45         int i;
46         int ce;
47         for(i=0;i<n;i++)
48         {
49             scanf("%d",&ce);
50             qi2.push(ce);
51         }
52         long long sum=0;
53         while(qi2.size()>1)
54         {
55             int u=qi2.top();
56             qi2.pop();
57             int v=qi2.top();
58             qi2.pop();
59             sum+=(u+v);
60             qi2.push(u+v);
61         }
62         printf("%lld\n",sum);
63         while(!qi2.empty())
64             qi2.pop();
65     }
66     return 0;
67 }
View Code

poj3253(Fence Repair),布布扣,bubuko.com

poj3253(Fence Repair)

标签:style   blog   http   color   os   io   for   art   

原文地址:http://www.cnblogs.com/ZhaoPengkinghold/p/3868325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!