@[冰冻罗非鱼](/user/225941) 此题应该是**区间动规**啊
by __LePetitPrince__ @ 2020-02-25 12:26:17
@[XTH号游侠](/user/255169) 和区间动规有什么关系……
by critnos @ 2020-02-25 12:27:22
@[XTH号游侠](/user/255169)
石子合并才是区间动规吧
by mazihang2022 @ 2020-02-25 12:28:48
@[冰冻罗非鱼](/user/225941)
你好又看见你了
这道题有一点就是合并之后会变成新的一堆,所以每一堆的合并次数不一定像你的B数组一样
如:6 6 7 8
6_6 ->12
变成7 8 12
此时合并的是7_8并非开始最小的12
7_8 ->15
变成12 15
12_15->27
合并完成
可以发现那两个6只合并了2次,并非你计算的三次
by mazihang2022 @ 2020-02-25 12:29:20
@[XTH号游侠](/user/255169) 这个是合并果子,你那个是合并石子……
by FZzzz @ 2020-02-25 12:29:38
名字好评
by Yukinoshita_Yukino @ 2020-02-25 12:31:59
~~看到您的名字想起了《三体》~~
by JS_TZ_ZHR @ 2020-02-25 12:55:20
谢谢大佬们,已经明白了
by 冰冻罗非鱼 @ 2020-02-25 12:58:36
这个……
是我的打开方式不对吗
```
#include<iostream>
#include<string>
#include<queue>
#include<set>
#include<algorithm>
using namespace std;
long long ans,n;
multiset<int> a;
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
int e;
cin >> e;
a.insert(e);
}while(a.size() >= 2){
multiset<int>::iterator it = a.begin();
int x = *it;
a.erase(a.find(*it));
int y = *it;
a.erase(a.find(*it));
ans += x + y;
a.insert(x + y);
}cout << ans;
return 0;
}
```
by 冰冻罗非鱼 @ 2020-02-25 13:08:42
@[冰冻罗非鱼](/user/225941) 用优先队列就可以了,不用multiset
by critnos @ 2020-02-25 13:14:11