贪心算法—Problem O

题意
题目意思是,给定T组测试数据,每组测试数据如下: 船每次能装n辆车,来回需要 2*t 时间,m辆车及其到达时间。
求:在最少的次数下的时间(最后一次不需要回头)以及最少的次数。
解题思路
运用贪心算法,贪心策略是:在没有达到最后N个人之前,ferry都是满载才出发。如果当前达到了倒数的第N个人,那么不论此时ferry中有多少人,都要出发,ferry回来之后再把剩下的N个人都载过去。
感想
题目我感觉不易,参考了下别人的思路~~
AC代码

#include 
#include 
using namespace std; 
#define MAX 1500 
int tt[MAX]; 
int main() 
{ 
    int t; 
    cin>>t; 
    while(t--) 
    { 
        int n,d,m; 
        cin>>n>>d>>m;
        int i; 
        for(i=1;i<=m;i++) 
        { 
            cin>>tt[i];
        } 
        if(m<=n) 
        { 
            cout<" "<<1<continue; 
        } 
        int cur=n; 
        int cost=0; 
        int num; 
        int most; 
        if(m%n==0) 
            num=m/n; 
        else 
            num=m/n+1; 
        if(m>=2*n) //note 
        { 
            while(cur+n<=m) 
            { 
                most=max(tt[cur],cost); 
                cost=most+2*d; 
                cur+=n; 
            } 
        } 
        if(m%n) 
        { 
            most=max(cost,tt[m-n]); 
            cost=most+2*d; 
        } 
        most=max(cost,tt[m]);
        cout<" "<

你可能感兴趣的:(ACM,贪心算法)