zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    ASCII码表
    arm linux 下移植busybox 的tftp
    Makefile中的路径
    Wireshark图解教程(简介、抓包、过滤器)【转载】
    在装有windows跟ubuntu的机器上重新安装windows后修复ubuntu的grub
    在linux里建立一个快捷方式,连接到另一个目录
    ubuntu 迁移部分 / 目录下的存储空间到 /home目录
    /etc/ntp.conf
    ntp 配置 autokey 功能【摘录】
    mips-openwrt-linux-gcc test_usbsw.c -o usbsw 编译问题
  • 原文地址:https://www.cnblogs.com/tsw123/p/4337094.html
Copyright © 2011-2022 走看看