• UVa 10037


    题目大意

    在一个晚上有N个人过河,他们有一个手电筒,需要有手电筒才能过河,每次最多两个人同时过河,每次过河时间等于速度最慢的那个人的过河时间,让所有人全部过河,花费的时间最少是多少?

    分析

    如果只有一个人过河,那么过河的总时间就是这个人过河的时间。如果是两个人过河,那么总时间为过河速度较慢的那个人的过河时间。如果是三个人过河,总花费时间为a+b+c。当人数大于等于4时,我们每次都让两个速度最慢的人过河,假设A和B表示速度最快和第二快的人,速度分别为a,b,C和D表示速度最慢和第二慢的人,速度分别为c,d。第一种策略是:让A和B一起过河,A返回,C和D一起过河,B返回,花费的时间为2*b+a+c。第二种策略是:让A和C一起过河,A返回,A和D一起过河,A返回,时间花费为2*a+c+d。比较两个策略的时间花费,哪个时间花费短就选择哪个策略。

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #define MAXN 1005
    using namespace std;
    int a[MAXN],q[2][MAXN*2];
    int m,n;
    int solve()
    {

    int total=0,i;
    m=-1;
    for( i=n-1; i>=3; i-=2)
    {
    int t1=2*a[0]+a[i-1]+a[i];
    int t2=2*a[1]+a[0]+a[i];
    if(t1<t2)
    {
    m++;
    q[0][m]=a[0];
    q[1][m]=a[i];
    m++;
    q[0][m]=a[0];
    m++;
    q[0][m]=a[0];
    q[1][m]=a[i-1];
    m++;
    q[0][m]=a[0];
    total+=t1;
    }
    else
    {
    m++;
    q[0][m]=a[0];
    q[1][m]=a[1];
    m++;
    q[0][m]=a[0];
    m++;
    q[0][m]=a[i-1];
    q[1][m]=a[i];
    m++;
    q[0][m]=a[1];
    total+=t2;
    }

    }
    if(i==2)
    {
    total+=a[0]+a[1]+a[2];
    m++;
    q[0][m]=a[0];
    q[1][m]=a[2];
    m++;
    q[0][m]=a[0];
    m++;
    q[0][m]=a[0];
    q[1][m]=a[1];
    }
    else if(i==1)
    {
    total+=a[1];
    m++;
    q[0][m]=a[0];
    q[1][m]=a[1];
    }
    else
    {
    total+=a[0];
    m++;
    q[0][m]=a[0];
    }
    return total;
    }
    int main(void)
    {
    int t;
    scanf("%d",&t);
    while(t--)
    {
    scanf("%d",&n);
    for(int i=0; i<n; i++)
    scanf("%d",&a[i]);
    sort(a,a+n);
    memset(q,0,sizeof(q));
    printf("%d ",solve());
    for(int i=0; i<=m; i++)
    {
    printf("%d",q[0][i]);
    if(q[1][i])
    printf(" %d",q[1][i]);
    printf(" ");
    }
    if(t) printf(" ");
    }
    return 0;
    }

  • 相关阅读:
    Winform中怎样去掉TextBox输入回车时的警告音
    sql server 2000 出现不能执行查询,因为一些文件丢失或未注册”
    c# winform 创建文件,把值写入文件,读取文件里的值,修改文件的值,对文件的创建,写入,修改
    <metro>PlayToReceiver class
    <metro>PlayToReceiver
    <C#>怎样学好Winform
    <C#>怎样学好winform3
    <C#>怎样学好winform4
    <metro>Application Data
    <metro>UI
  • 原文地址:https://www.cnblogs.com/tsw123/p/4337094.html
Copyright © 2020-2023  润新知