1 条题解

  • 0
    @ 2023-6-11 12:16:29

    C++ :

    #include<iostream>
    using namespace std;  
    
    int a[1005]; //每个人所需时间 
    
    //将过桥时间从小到大排序 
    void maopao(int a[],int n){
    	bool ok;
    	//进行N-1轮排序 
    	for(int i=n-1;i>=1;i--){
    		
    		ok=true;//假设没有交换
    		 
    		//每轮进行i次排序
    		for(int j=0;j<i;j++){
    			//大的数往下沉 
    			if(a[j]>a[j+1]){
    				//相互交换 C++自带函数 
    				swap(a[j],a[j+1]);
    				ok=false;//一旦发生过交换,标志设置成false,说明需要下一轮 
    			}
    		} 
    		
    		//如果此轮没有发生过交换,说明数组已经排序完成
    		//无需下一轮比较跳出循环
    		if(ok==true)
    			break; 
    	}
    	
    }
     
    
    int main() {
    
    	int n;//n个旅行家
    	int sum=0;//过桥用的总时间 
    	cin>>n;
    	
    	//输入每个人的过桥时间
    	for(int i=0;i<n;i++)
    		cin>>a[i];
    	
    	//过桥时间排序 
    	maopao(a,n);
    	
    	//如果超过4人 
    	 while(n >= 4)  
            {  
            	//当方案1优于方案2 
                if((a[0]+a[n-2]) < (2*a[1]))  
                {  
                	//将用时最长的2个人送到河对面 
    				
                    sum += a[n-1]; //用时最短和用时最长的一起过去 
                    sum += a[0]; //用时最短的回来 
                    sum += a[n-2]; //用时最短的和用时第二长的过去 
                    sum += a[0]; //用时最短的回来	 
                }  
                else  
                {  
                	//同样也是将用时最长的2个人送到河对面  
                	
                    sum += a[1]; // 最短和第二短的人过去 
                    sum += a[0]; //最短的回来送手电 
                    sum += a[n-1]; //最长的和第二长的过去 
                    sum += a[1]; //第二短的回来 
                }  
                
                //人数减少2人 :用时最长的2人已经被送过河了就不动他们了 
                n -= 2;  
            }  
    	 
    	   //如果n==3,用时最短的和用时最长的一起过去,然后用时最短的回来,再和剩下的一个人过去 ; 
    	if(n == 3)  
                sum += a[1] + a[0] + a[2];  
            else if(n == 2)  
                sum += a[1];  
            else  
                sum += a[0];  
                
            cout<<sum<<endl;
    		
    } 
    
    • 1

    信息

    ID
    2164
    时间
    1000ms
    内存
    16MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者