zoukankan      html  css  js  c++  java
  • POJ 1700 过河坐船最短时间问题

         这道题如果理解了就不难了,可分为一步步两个永远最快的a[0],a[1]载现存的两个最慢的过河的问题,一种是最快a[0]载现存最慢过去,0再回来,再载次慢,0再回来,时间为2*a[0]+t[p-2]+t[p-1]或者01过去,0回来,34过去(不可能0再载3或者4过去,那就浪费了第一次0载1过去的意义,等于在第一种方案基础上把34载过去又把2载过去2回来,时间为a[0]+2*a[1]+t[p-1],再根据更新的数据,比较大小,继续选定方案.


    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    bool cmp(int a,int b){
        return a<b;
    }
    
    int main(){
       int cnt,p,i,sum;
       int *a = new int[1005];
       cin>>cnt;
       while(cnt--){
            sum = 0;
            cin>>p;
            for(int i = 0;i<p;i++)
                    cin>>a[i];
                    sort(a,a+p,cmp);
                for(i=p-1;i>2;i-=2){
                if(a[0]+2*a[1]+a[i]>2*a[0]+a[i-1]+a[i]) //主要就在这两种坐船的方式,比较2a【1】和a[0]+a[i-1]的时间,由输入数据决定
                    sum+=2*a[0]+a[i-1]+a[i];
                else sum+=a[0]+2*a[1]+a[i];
                }
                if(i==2) sum+=a[0]+a[1]+a[2];
                else if(i==1) sum+=a[1];
                else sum+=a[0];
                cout<<sum<<endl;
        }
        delete []a;
        return 0;
    
        }
    


  • 相关阅读:
    338. 比特位计数
    300.最长上升子序列
    git 钩子服务代码
    thinkphp5.1 封装文件上传模块
    Theano 基础
    使用anaconda和pycharm搭建多python本版的开发环境
    GIT常用命令
    Thinkphp 获取数据表随机值
    在Windows中利用.bat提交git代码到不同分支
    Windows .bat 常量
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256489.html
Copyright © 2011-2022 走看看