日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[BZOJ1724][Usaco2006 Nov]Fence Repair 切割木板

發布時間:2025/7/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [BZOJ1724][Usaco2006 Nov]Fence Repair 切割木板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1724: [Usaco2006 Nov]Fence Repair 切割木板

Time Limit: 5 Sec??Memory Limit: 64 MB Submit: 1272??Solved: 671 [Submit][Status][Discuss]

Description

Farmer John想修理牧場柵欄的某些小段。為此,他需要N(1<=N<=20,000)塊特定長度的木板,第i塊木板的長度為Li(1<=Li<=50,000)。然后,FJ去買了一塊很長的木板,它的長度正好等于所有需要的木板的長度和。接下來的工作,當然是把它鋸成需要的長度。FJ忽略所有切割時的損失——你也應當忽略它。 FJ郁悶地發現,他并沒有鋸子來把這塊長木板鋸開。于是他把這塊長木板帶到了Farmer Don的農場,想向FD借用鋸子。 作為一個有商業頭腦的資本家,Farmer Don沒有把鋸子借給FJ,而是決定幫FJ鋸好所有木板,當然FJ得為此付出一筆錢。鋸開一塊木板的費用,正比于木板的長度。如果這塊木板的長度是21,那么鋸開它的花費便是21美分。 談妥條件后,FD讓FJ決定切割木板的順序,以及每次切割的位置。請你幫FJ寫一個程序,計算為了鋸出他想要的木板,他最少要花多少錢。很顯然,按不同的切割順序來切開木板,FJ的總花費可能不同,因為不同的切割順序,會產生不同的中間結果。

Input

* 第1行: 一個正整數N,表示FJ需要木板的總數

* 第2..N+1行: 每行包含一個整數,為FJ需要的某塊木板的長度

Output

* 第1行: 輸出一個整數,即FJ完成對木板的N-1次切割的最小花費

Sample Input

3
8
5
8


??? FJ打算把一塊長為21的木板切成長度分別為8,5,8的三段。

Sample Output

34
輸出說明:

起初,木板的長度為21。第一次切割木板花費21美分,把木板切成長分別為13和8的兩塊。然后花費1
3美分把長為13的木板切成長為8和5的兩塊。這樣的總花費是21+13=34美分。如果第一次把木板切成長
為16和5的兩塊,那么第二次切木板的花費就是16美分,這樣的總花費就是37美分,比剛才花費34美分的方案來的差。
每次貪心地合并兩個最短木板即可,可用堆維護 #include <queue> #include <cstdio> #include <algorithm> #include <functional> using namespace std; int n; priority_queue<int, vector<int>, greater<int> > q; int main(){scanf("%d", &n);for(int x, i = 1; i <= n; i++){scanf("%d", &x);q.push(x);}long long ans = 0;for(int a, b, i = 1; i < n; i++){a = q.top(); q.pop();b = q.top(); q.pop();ans += a + b;q.push(a + b);}printf("%lld\n", ans);return 0; }

?

轉載于:https://www.cnblogs.com/ruoruoruo/p/7486359.html

總結

以上是生活随笔為你收集整理的[BZOJ1724][Usaco2006 Nov]Fence Repair 切割木板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。