求大佬解释,40分

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

@[BH3rd](/user/715162) ~~魈の迷惑操作~~ n小于等于2000,你设个1001肯定不对,建议社极大值 然后这题正解是堆,复杂度nlogn,如果数据再强点你就要tle
by Lian_lele @ 2024-03-13 16:56:27


@[Lian_lele](/user/923248) 啊呸更正一下 ai小于等于2000
by Lian_lele @ 2024-03-13 16:59:28


@[Lian_lele](/user/923248) ```cpp #include<bits/stdc++.h> using namespace std; int main() { int n,a[10086],sum=0; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } for(int i=1;i<n;i++) { sort(a+1,a+1+n); sum=sum+a[1]+a[2]; a[1]=a[1]+a[2]; a[2]=10086; } cout<<sum; return 0; } ``` 还是不行
by BH3rd @ 2024-03-13 17:22:21


@[BH3rd](/user/715162) 我眼瞎,n小于等于20000,话说极大值你直接设1000000000不行吗 然后开ll
by Lian_lele @ 2024-03-13 18:28:28


```cpp #include <bits/stdc++.h> using namespace std; const int MAXN = 20010; int n, b = 0, c = 0, a[MAXN]; int main() { priority_queue<int> q; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; q.push(-a[i]); } while (!q.empty()) { if (q.size() == 1) { break; } b = abs(q.top()); q.pop(); b += abs(q.top()); q.pop(); c += b; q.push(-b); } cout << c; return 0; } ```
by Diego_Song @ 2024-03-14 13:18:34


@[Diego_Song](/user/1078710) 优先队列
by Diego_Song @ 2024-03-14 13:19:03


@[Lian_lele](/user/923248) 哦~谢谢大佬
by BH3rd @ 2024-03-15 15:52:43


@[Diego_Song](/user/1078710) 好的,谢谢大佬
by BH3rd @ 2024-03-15 15:53:12


|