zoukankan      html  css  js  c++  java
  • 过河问题(POJ1700)

    题目链接:http://poj.org/problem?id=1700

    解题报告:

    1、贪心算法,每次过两个速度最慢的人,抵消那个较慢的人的时间。

    #include <stdio.h>
    #include <algorithm>
    
    using namespace std;
    
    
    int a[10000];
    
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int i;
            int time=0;
            int n;
            scanf("%d",&n);
            for(i=0;i<n;i++)
                scanf("%d",&a[i]);
            if(n==1)
            {
                printf("%d
    ",a[0]);
                continue;
            }
            else
            {
                sort(a,a+n);
                ///当人数大于3时,让速度最慢的两个人过河。直至剩余2,或者3个人。
                for(i=n-1;i>2;i-=2)
                {
                    ///两种方案
                    ///1、a[i]和a[i-1]两个人与a[0]一起过河,由a[0]送手电筒
                    ///2、a[0]和a[1]首先过河,再a[0]过来,再a[i]和a[i-1]过来,再a[1]送手电筒
                    time+=min(a[i]+a[i-1]+2*a[0],a[1]+a[0]+a[i]+a[1]);
                }
                if(i==1)///两个人
                    time+=a[1];
                else time+=a[0]+a[1]+a[2];///a[0]和a[2]过河,再a[0]送手电筒,再a[0]和a[1]过河。
            }
            printf("%d
    ",time);
        }
        return 0;
    }
  • 相关阅读:
    flex布局
    input框不能输入问题
    JS的innerHTML完成注册表
    CSS的z-index属性和box-shadow属性
    JS个人笔记
    css照片墙
    透明度设置
    a标签的name属性
    iframe标签
    title属性
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5320270.html
Copyright © 2011-2022 走看看