吃早饭


私信TA

用户名:dotcpp0721969

访问量:3592

签 名:

等  级
排  名 2547
经  验 2165
参赛次数 0
文章发表 21
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:
只有保证每次搬运的是当前所有堆中重量最小的两堆果子才能使体力消耗最小;

使用set容器自动排序,但又考虑到重量肯能出现相同情况,就使用multiset(可以放入重复元素并自动排序)
参考代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e4 + 10;
multiset<ll> st;
int n;
ll ans = 0;
void solve(){//数据初始化 
    cin>>n;
    for(int i = 0;i<n;i++){
        int m;
        cin>>m; 
        st.insert(m);//加入会自动排序 
    }
    while(st.size()!=1){
        ll temp = 0;
        auto it = st.begin();//it指向最小重量的那一堆 
        auto it2 = it;
        temp += *it;//加上最小堆这部分体积 
        it++;//it后移指向次小重量的那堆 
        st.erase(it2);//移除已经计算的最小堆 
        temp += *it;//加上次小堆这部分体积 
        st.erase(it);//移除已经计算的次小堆 
        st.insert(temp);//移除已经计算的次小堆 
        ans += temp;//temp就是这次搬运的体力消费 
    }
    cout<<ans;
}
int main(){
    solve();
    return 0;
}


 

0.0分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区