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的主要内容,如果未能解决你的问题,请参考以下文章

NYOJ-47 过河问题

nyoj-2359 巴什博弈?

NYOJ 815 三角形海伦公式

nyoj 40-公约数和公倍数(gcd)

Xcode 4.6 的备份代码片段

在下面的代码片段中的剩余 ='passthrough' 处的代码中出现语法错误