1 条题解
-
0
C :
#include<stdio.h> int a[1100]; int main() { int t,n,i,k; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); if(n == 1) //一个旅行者 printf("%d\n",a[0]); else if(n == 2) //两个旅行者 printf("%d\n", a[0] > a[1] ? a[0]: a[1]); else //多个 { int min=a[0];//排个序 if(a[i]<min) { k=a[i]; a[i]=min; min=k; } int sum = 0; while(1) { if(n == 2) //剩两个人 { sum += a[1]; break; } else if(n == 3) //剩三个人 { sum += a[0] + a[1] + a[2]; break; } else { int t1 = a[0]+a[1] +a[1] +a[n-1]; //方案1 sum += t1; n-=2; } } printf("%d\n",sum); } } return 0; }
C++ :
#include<stdio.h> #include<algorithm> #define MIN(a,b) a<b?a:b using namespace std; int main() { int T,N,s[1005],t,i; scanf("%d",&T); while(T--) { t=0; scanf("%d",&N); for(i=0;i<N;i++) scanf("%d",&s[i]); sort(s,s+N); if(N==1)t+=s[0]; else if(N==2)t+=s[1]; else if(N==3)t+=MIN(s[1]*2+s[N-1],s[0]+s[N-1]+s[N-2]); else { while(N>3) { t+=MIN(s[0]+s[1]*2+s[N-1],s[0]*2+s[N-1]+s[N-2]); N-=2; } if(N==2)t+=s[1]; if(N==3)t+=MIN(s[1]*2+s[N-1],s[0]+s[N-1]+s[N-2]); } printf("%d\n",t); } }
Java :
import java.util.Arrays; import java.util.Scanner; public class Main { static Scanner sc=new Scanner(System.in); public static void main(String[] args) { int T=sc.nextInt(); while(T-->0) { int N=sc.nextInt(); getMinTimes(N); } } public static void getMinTimes(int x) { int arr[]=new int[x]; int temp=0; for(int i=0;i<x;i++) { arr[i]=sc.nextInt(); } Arrays.sort(arr); for(int i=arr.length-1;i>=0;i-=2) { if(i==0){ System.out.println(temp+arr[0]); break; }else if(i==1){ System.out.println(temp+arr[1]); break; }else if(i==2){ System.out.println(temp+arr[1]+arr[0]+arr[2]); break; }else { if(2*arr[1]<=arr[0]+arr[i-1]) { temp+=arr[0]+2*arr[1]+arr[i]; }else{ temp+=2*arr[0]+arr[i-1]+arr[i]; } } } } }
- 1
信息
- ID
- 687
- 时间
- 3000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者