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

初始一共有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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树形动态规划,顾名思义就是树+DP,先分别回顾一下基本内容吧:动态规划:问题可以分解成若干相互联系的阶段,在每一个...
    Mr_chong阅读 1,531评论 0 2
  • 生活大爆炸版石头剪刀布 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,...
    bbqub阅读 491评论 0 0
  • 我的青春: 我的青春没有经常听说的几个词一样 没疯狂过 热血过 张扬过 并不精彩也不热闹 也没有温馨的回忆...
    大壳z阅读 152评论 0 0
  • 文/樱桃一个果 (一) 昨天晚上回家的时候,我看到爸爸的右手食指被卫生纸和绝缘胶布裹的圆圆的,像一只小香肠。 我问...
    樱桃一个果阅读 741评论 0 0