美文网首页
腾讯校招-石子合并-c++

腾讯校招-石子合并-c++

作者: Jacinth | 来源:发表于2017-09-13 16:58 被阅读0次

    初始一共有n堆石子,每堆石子有w[i]个石子,对石子堆进行合并,每次任意选取两堆石子进行合并。一堆有x个石子的石子堆和一堆有y个石子的石子堆合并将得到一堆x+y个石子的石子堆,这次合并得分为x*y,当只剩下一堆石子的时候结束。希望获得最大得分,算出最大得分是多少?
    输入:
    输入包括两行,第一行一个正整数n(2<=n<=100)。
    第二行包括n个正整数wi,即每堆石子的个数。

    输出:
    输出一个正整数,即最大得分是多少。

    样例输入:

    3
    1 2 3

    样例输出;

    11

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <map>
    #include <string>
    #include <vector>
    #include <set>
    #include <queue>
    #include <deque>
    #include <stack>
    #include <algorithm>
    #include <unordered_map>
    using namespace std;
    
    /*解题思路:贪心算法
    每次选两堆最多的,合并直至只剩一堆为止
    输入:
    3
    1 2 3
    输出;
    11*/
    int main(){
        int n;
        cin>>n;
        int stone[100];
        int i=0;
        do{
            cin>>stone[i++];
        }while(getchar()!='\n');
        sort(stone,stone+n);
        int cur=0;//得分
        int tmp = stone[0];
        for(int i = 1;i<n;i++){
            cur = cur+tmp*stone[i];
            tmp = tmp+stone[i];
        }
        cout<<cur<<endl;
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:腾讯校招-石子合并-c++

          本文链接:https://www.haomeiwen.com/subject/grjksxtx.html