codevs1063 合併果子 貪心
阿新 • • 發佈:2019-01-30
#include<cstdio> #include<algorithm> using namespace std; long long a[10005]; int main() { int n,i,t; long long ans,p; scanf("%d",&n); for(i=1; i<=n; i++) scanf("%d",&a[i]); sort(a+1,a+n+1); ans=0; for(i=1; i<n; i++) { a[i+1]=a[i]+a[i+1]; a[i]=0; t=i+1; ans+=a[i+1]; while(t<n&&a[t]>a[t+1]) { p=a[t]; a[t]=a[t+1]; a[t+1]=p; t++; } } printf("%lld",ans); return 0; }
//這個更好 #include<cstdio> #include<iostream> #include<queue> using namespace std; int main(){ int n,t; priority_queue<int,vector<int>,greater<int> > Q; cin>>n; for(int i=0;i<n;i++){ cin>>t; Q.push(t); } int ans=0; while(Q.size()>1){ int a,b; a=Q.top(); Q.pop(); b=Q.top(); Q.pop(); ans+=a+b; Q.push(a+b); } cout<<ans<<endl; return 0; }