蓝桥杯真题:谈判
?
輸入輸出樣例
示例 1
輸入
4 9 1 3 5輸出
31運(yùn)行限制
- 最大運(yùn)行時間:1s
- 最大運(yùn)行內(nèi)存: 128M
這題思路很簡單,如果是最小的代價和,一開始我的思路就是先排序,然后計算前綴和,然后把前綴和相加就好了。
但是這樣其實有一個漏洞,那就是在計算前綴和的過程中其實也產(chǎn)生了新的代價的節(jié)點。如果新節(jié)點的代價又比后邊的幾個節(jié)點的代價高,那就出錯了,不能簡單地相加。
然后想到最小堆,每次選最小代價的兩個節(jié)點相加再push進(jìn)去,原來的兩個小姐點就pop掉就好了。
代碼如下所示:
#include <bits/stdc++.h> using namespace std; typedef long long ll; int n,a; int num[10001]; int ans; priority_queue<int,vector<int>,greater<int>> tree;int main() {// 請在此輸入您的代碼cin>>n;for(int i=0;i<n;++i){cin>>a;tree.push(a);}if(tree.size()==1){cout<<tree.top();return 0;}while(tree.size()>1){int x=tree.top();tree.pop();int y=tree.top();tree.pop();tree.push(x+y);ans+=x+y;}cout<<ans<<endl;return 0; }總結(jié)
- 上一篇: Hyperledger Fabric区块
- 下一篇: 中文邮件营销html模版,怎么制作邮件营