NYOJ 47
Posted 萌新上路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NYOJ 47相关的知识,希望对你有一定的参考价值。
思路:
在n>3的时候就用前两个小的来带后两个大的,有两种方式(一就是1,2先过,然后1回来,然后n,n-1过,然后2,回来),(二就是 1,n先过去 然后1回来,然后 1,n-1过去吗、,然后1回来)
如果n==3的时候,就1,2过然后1回来,然后1,3过就过来了,如果n==2时,1,2一起过,如果n==1时,直接1过来就行了.
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int a[1000+5]; int main() { int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } sort(a+1,a+1+n); int sum=0,k=n; while(k>3) { if(a[k]+a[k-1]+2*a[1]>a[1]+a[k]+2*a[2]) { sum+=a[1]+a[k]+2*a[2]; k-=2; } else { sum+=a[k]+a[k-1]+2*a[1]; k-=2; } } if(k==3) { sum+=a[1]+a[2]+a[3]; } if(k==2) { sum+=a[2]; } if(k==1) { sum+=a[1]; } printf("%d\n",sum); } return 0; }
以上是关于NYOJ 47的主要内容,如果未能解决你的问题,请参考以下文章