• NYOJ 47 河问题


    时间限制:1000 ms  |  内存限制:65535 KB
    难度:5
    描写叙述

    在漆黑的夜里,N位旅行者来到了一座狭窄并且没有护栏的桥边。假设不借助手电筒的话,大家是不管怎样也不敢过桥去的。不幸的是,N个人一共仅仅带了一仅仅手电筒。而桥窄得仅仅够让两个人同一时候过。

    假设各自单独过桥的话,N人所须要的时间已知;而假设两人同一时候过桥。所须要的时间就是走得比較慢的那个人单独行动时所需的时间。问题是,怎样设计一个方案,让这N人尽快过桥。 

    输入
    第一行是一个整数T(1<=T<=20)表示測试数据的组数
    每组測试数据的第一行是一个整数N(1<=N<=1000)表示共同拥有N个人要过河
    每组測试数据的第二行是N个整数Si,表示此人过河所须要花时间。(0<Si<=100)
    输出
    输出全部人都过河须要用的最少时间
    例子输入
    1
    4
    1 2 5 10
    例子输出
    17


    感觉比較新鲜的一道题


    代码:

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
    	int n,m,i,j,k;
    	cin>>n;
    	while(n--)
    	{
    		cin>>m;
    		int *a=new int[m];
    		for(i=0;i<m;i++)
    			cin>>a[i];
    
    		sort(a,a+m);
    
    		k=0;
    		while (m>3)
    		{
    			if(2*a[1]<a[0]+a[m-2])
    			{
    				k+=a[1];	//a[0]和a[1]过河
    				k+=a[0];	//a[0]回来
    				k+=a[m-1];	//a[0]和a[n-1]过河
    				k+=a[1];	//a[1]回来
    			}
    			else
    			{
    				k+=a[m-1];	//a[0]和a[n-1]过河
    				k+=a[0];	//a[0]回来
    				k+=a[m-2];	//a[0]和a[n-2]过河
    				k+=a[0];	//a[1]回来
    			}
    			m-=2;
    		}
    
    		if(3==m)
    			k=k+a[0]+a[1]+a[2];
    		else if(2==m)
    			k=k+a[1];
    		else if(1==m)
    			k=k+a[0];
    
    		cout<<k<<endl;
    
    		delete[] a;
    	}
    	return 0;
    }



  • 相关阅读:
    webform文件上传加水印
    2017-6-6 ASP.NET Ajax版页面无刷新三级联动
    2017-6-5 Ajax应用
    转【 正则表达式】
    2017-6-4 JQuery中的选择器和动画 弹窗遮罩
    Linq 组合分页查询
    2017-6-2 Linq高级查询和函数
    2017-6-3 JQuery中的Dom操作和事件
    WebForm母版页
    WebForm内置对象:Application和ViewState、Repeater的Command用法
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5046667.html
Copyright © 2020-2023  润新知