HOJ 1262 贪心 ------ 过河问题

来源:互联网 发布:软件更新下载 编辑:程序博客网 时间:2024/05/01 11:52

题目:百万雄师过大江

/*这个题做的淡淡的忧伤啊!开始的时候以为一直用最少的时间的送是最优的解法,仔细想想不对最好的和次好的一起送最好,还是a不了,各种度娘啊!方案一:先让耗时最小的两个过河,耗时cost_tm[1];耗时最小的回来,耗时cost_tm[0];耗时最大的两个过河,耗时cost_tm[i];耗时第二小的回来,耗时cost_tm[1];方案二:耗时最小的和耗时最大和过河,耗时cost_tm[i];耗时最小的回来,耗时cost_tm[0];耗时第小的和耗时第二大的过河,耗时cost_tm[i-1];耗时最小的回来,耗时cost_tm[0];这样过河,如果最后剩3个,耗时肯定为这三个的和,如果还有二个,耗时为大的那个,如果还有一个,耗时肯定为那个喽。好吧,思路写到这儿,就是贪心么.事情还没有完啊,擦勒!*/

然后交啦是格式错误,点开看是:


尼玛啊!伤不起,听吧友说是数组名字不能是time;

好吧,改呗,改完是这样:



尼玛,又度娘,说是数组越界,然后自习检查我的code ,没有这回事啊!后来一看,应该是我数组开小啦!


尼玛,伤不起啊,伤不起!!

贴下代码:

#include<iostream>#include<stdio.h>#include <algorithm>using namespace std;bool cmp( int a, int b ){    return b > a;}int cost_tm[1000000];int main(){    int T,n,ans,i,ans2,ans1;    cin >> T;    while(T--)    {        ans=0;        cin >> n;        for(i=0; i<n; i++) cin >> cost_tm[i];        sort(cost_tm,cost_tm+n,cmp);        for(i=n-1; i>2; i-=2)        {            ans1=2*cost_tm[1]+cost_tm[0]+cost_tm[i];            ans2=2*cost_tm[0]+cost_tm[i]+cost_tm[i-1];            ans+=(ans1<ans2)?ans1:ans2;        }        if(i==2)ans+=cost_tm[0]+cost_tm[1]+cost_tm[2];        else if(i==1)ans+=cost_tm[1];        else if(i==0)ans+=cost_tm[0];        cout << ans << endl;    }    return 0;}




原创粉丝点击