新题解,求加
查看原帖
新题解,求加
866658
liuhongyi20110504楼主2024/11/3 16:29

本题p1090 在经过分析后可得算法为哈夫曼树 由哈夫曼树的创建可得 将原数组sort后for(i,1~n-1) 循环a数组 新节点为a[i+1]=a[i]+a[i+1] 将其值加入ans(ans+=a[i+1]) 再将a数组sort(a+i+1,a+n) 但是经分析可以直接用a[i+1]与后面的数据打擂 AC:

#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll ans;
int a[100005]={INT_MAX};
int main() {
	int n, n1;
	cin>>n;
	for(int i=0; i<n; i++) {
		cin>>a[i];
	}
	sort(a,a+n);
	for(int i=0; i<n-1; i++) {
		a[i+1]=a[i]+a[i+1];
		ans+=a[i+1];
		for(int j=i+1; j<n-1; j++) {
			if(a[j]>a[j+1]) {
				swap(a[j],a[j+1]);
			} else {
				break;
			}
		}
	}
	cout<<ans;
	return 0;
}

用时最大32ms

2024/11/3 16:29
加载中...