1 条题解
-
0
C :
#include<stdio.h> int main(){ int x[30005],b[30005]={0},i,j,n,m1,m2,j1,j2,sum=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&x[i]); for(j=1;j<n;j++){ m1=m2=1000000000;j1=j2=0; for(i=0;i<n;i++) if(b[i]==1)continue; else if(x[i]<m1) { if(x[i]<m2){m1=m2;j1=j2;m2=x[i];j2=i;} else{m1=x[i];j1=i;} } x[j2]=x[j1]+x[j2]; sum+=x[j2]; b[j1]=1; } printf("%d\n",sum); return 0; }
C++ :
#include<cstdio> #include<iostream> #include<cstring> #include<queue> using namespace std; priority_queue <int> que; int main() { int n; scanf("%d",&n); for(int i=0,x;i<n;++i) { scanf("%d",&x); que.push(-x); } int ans=0; for(int i=1,tmp;i<n;++i) { tmp=que.top(); ans-=que.top(); que.pop(); tmp+=que.top(); ans-=que.top(); que.pop(); que.push(tmp); } cout<<ans<<endl; return 0; }
Pascal :
var i,j,k,m,n,t,s:longint; a:array[1..500]of longint; begin readln(n); for i:=1 to n do read(a[i]); for i:=1 to n-1 do begin for j:=i+1 to n do begin if a[i]>a[j] then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end; end; end; s:=0; k:=0; repeat a[1]:=a[1]+a[2]; a[2]:=a[n-k]; a[n-k]:=0; s:=a[1]+s; for i:=1 to n-k-2 do begin for j:=i+1 to n-k-1 do begin if a[i]>a[j] then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end; end; end; inc(k); until k=n-1; writeln(s); end.
- 1
信息
- ID
- 899
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者