zoukankan      html  css  js  c++  java
  • poj1700 心得

    本题需注意

    假设:int group[] 在left side, 要到达right side

    1.贪心算法使用在:A:船从right side 返回left side时速度是最快的/次快的

             B:船从left side 到right side,再返回,来回的总时间最短

    2.1从right side 返回left side时速度是最快的/次快的,有两种策略

      1> 最快的(即所用时间t[0])和次快的过河,然后最快的将船划回来,再次慢的和最慢的过河,然后次快的将船划回来.

              即所需时间为:t[0]+2*t[1]+t[n-1]
      2> 最快的和最慢的过河,然后最快的将船划回来,再最快的和次慢的过河,然后最快的将船划回来.

              即所需时间为:2*t[0]+t[n-2]+t[n-1]

    参考博客:http://www.cnblogs.com/yueshuqiao/archive/2011/07/22/2113698.html

    2.2来回的总时间最短:两种策略都计算一遍,然后选出最短时间

    3.个人反思:

      两种策略都想到来着,然而没想到要用两种策略都计算一遍再比较,还是对贪心算法运用的不熟

    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    bool cmp(int a,int b)
    {
        return a<b;
    }
    
    int main()
    {
        int m,n,t[1001],i,sum;
        cin>>m;
        while(m--)
        {
            cin>>n;
            sum=0;
            for(i=0;i<n;i++)
                cin>>t[i];
            sort(t,t+n,cmp);
            for(i=n-1;i>2;i-=2)
                if(t[0]+2*t[1]+t[i]>2*t[0]+t[i-1]+t[i])
                    sum+=2*t[0]+t[i-1]+t[i];
                else sum+=t[0]+2*t[1]+t[i];
                if(i==2) sum+=t[0]+t[1]+t[2];
                else if(i==1) sum+=t[1];
                else sum+=t[0];
                cout<<sum<<endl;
        }
        return 0;
    }
  • 相关阅读:
    C# 开发Chrome内核浏览器(WebKit.net)
    SQL 存储过程语句拼接愁人的时间类型
    Linux简介
    揭秘Node.js深受欢迎的原因
    6个强大的AngularJS扩展应用
    ElasticSearch NEST
    web中的各种打印方案
    配置问题总结
    leetcode -day29 Binary Tree Inorder Traversal &amp; Restore IP Addresses
    HBase高速导入数据--BulkLoad
  • 原文地址:https://www.cnblogs.com/HackHer/p/6081359.html
Copyright © 2011-2022 走看看