codeforces-3B Lorry

题意:给定船只大小及承载能力,在空间大小一定的情况下求最大的承载能力

#include 
#include 
typedef struct Boat{
    int capacity,id,space;
    float ratio;
}Boat;

int cmp(const void *a,const void *b){
    // if ( (*(Boat*)a).ratio > (*(Boat*)b).ratio )
    //  return  -1;
    // if ( (*(Boat*)a).ratio < (*(Boat*)b).ratio )
    //  return  1;  
    // if ( (*(Boat*)a).ratio == (*(Boat*)b).ratio )
    //  return (*(Boat*)a).space > (*(Boat*)b).space ?1:-1;
        
        return (*(Boat*)a).ratio > (*(Boat*)b).ratio ?-1:1;
    
    
}

Boat boat[100005];
int order[100005];  
int main(){

    int n,v,i,j,k=0,optimal=0,lastKayaks=-1,lastK,edgeKayaks=-1,edgeK,uncheckC=-1,uncheckK=-1,allcapacity=0 ;
    scanf("%d%d",&n,&v);
    for(i=0;i0){
            optimal+=boat[j].capacity;
            order[k++]=boat[j].id;
            v-=boat[j].space;
            if(boat[j].space == 1){
                lastK = k-1;
                lastKayaks = j; 
            }
        }
        else{
                if(uncheckC==-1&&boat[j].space==2) 
                    uncheckC = j;  
            }                
    }
    if(v==0&&edgeKayaks!=-1&&uncheckC!=-1){
         if(boat[uncheckC].capacity - boat[lastKayaks].capacity - boat[edgeKayaks].capacity  >0){
                order[lastK]=boat[uncheckC].id;
                k--;
                optimal+=boat[uncheckC].capacity - boat[lastKayaks].capacity - boat[edgeKayaks].capacity ;
            }
        
    }
    if(v==1&&lastKayaks!=-1&&uncheckC!=-1){
         if(boat[uncheckC].capacity - boat[lastKayaks].capacity >0){
                order[lastK]=boat[uncheckC].id;
                optimal+=boat[uncheckC].capacity - boat[lastKayaks].capacity ;
            }
    }
    printf("%d\n",optimal);
    for(i=0;i

你可能感兴趣的:(codeforces-3B Lorry)