P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G multiset优化
P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
这是一道贪心算法的题目,每次选择两个最小的堆,合并后,继续直到只有一堆为止,可能用multiset进行维护。
#include<bits/stdc++.h>
using namespace std;
int main()
{
multiset<int> s;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int a;
cin>>a;
s.insert(a);
}
multiset<int>::iterator iter;
int ans=0;
for(int i=1;i<n;i++)
{
int total=0;
iter=s.begin();//取当前最小值
total+=*iter;//当前合并的费用
s.erase(iter);//删除
iter=s.begin();//取当前最小值
total+=*iter;//当前合并的费用
s.erase(iter);//删除
ans+=total;//统计总费用
s.insert(total); //新增新的堆
}
cout<<ans;
}
浙公网安备 33010602011771号