牛牛算数题解

题解

  1. 首先我们可以把c提出来。

  2. 然后我们考虑既然我们一定要计算出一个总答案,我们如何才能最小化花费呢?

  3. 我们贪心的考虑,是不是每次选取最小的两个数字合并会花费最小呢?

  4. 举一个例子,比如:有a,b,d三个数,c为100
    最后结果为:ans = ((a + b) * 100 + d) * 100= (a + b) * 10000 + d*100
    表明越先选取的数字他所乘积的权重越大。所以先选小的好。

  5. 所以我们只需要通过一个最小堆来维护一下即可。

class Solution {
public:
    /**
     * 返回一个数字表示输出计算n个数字和的最小花费的时间。
     * @param n int整型 表示有n个数。
     * @param c int整型 参数c
     * @param a int整型vector ai表示第i个数的大小
     * @return long长整型
     */
    long long solve(int n, int c, vector<int>& a) {
        // write code here
        long long ans=0;
        priority_queue<long long ,vector<long long >,greater<long long > > h;
        for (int i=0; i<n; i++)
        {
            h.push(a[i]);

        }
        long long  x,y;
        for (int i=1; i<n; i++)
        {
            x=h.top(),h.pop();
            y=h.top(),h.pop();
            ans+=(x+y); h.push(x+y);
        }
        ans=ans*(long long )c;
        return ans;
        }
};
全部评论

相关推荐

10-02 19:29
已编辑
浙江科技大学 运营
点赞 评论 收藏
分享
10-20 15:26
门头沟学院 Java
桥头牛油火锅:这个比例不正常,简历的话项目经历放中间,项目功能分点可以再明确点,前面加“·”或者“1 2 3”,另外简历上的照片可以去外面摄影店拍一下,以后也会用到的,hr筛人也是多少会看的,毕竟世界是一个巨大的卡颜局嘛,还有有些hr由于消息太多可能没看到,后面可能会回来找你,要简历的还会多一点,我也是普2本,比例大致是600:90:15:3,当然我实力不太够,拿的offer比较少,慢慢来吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务