• 1033. To Fill or Not to Fill (25)


    #include<stdio.h>
    #include<vector>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int C,D,Davg,N;
    double totDis = 0.0;
    double totCost = 0.0;
    double longDis = 0.0;
    double leftCap = 0.0;
    typedef struct NODE{
    	double price;
    	int dis;
    }Node;
    bool cmp(Node &a,Node &b){
    	return a.dis<b.dis;
    }
    int main()
    {
    	cin>>C>>D>>Davg>>N;
    	vector<Node>station(N+1);
    	for(int i=0;i<N;i++){
    		cin>>station[i].price>>station[i].dis;
    	}
    	station[N].price = 0;
    	station[N].dis = D;
    	sort(station.begin(),station.end(),cmp);
    	longDis = C * Davg;
    	int index = 0;
    	if(station[0].dis != 0 ) {
    			printf("The maximum travel distance = 0.00");
    			return 0;
    	}
    	while(index <N){
    		double minPri = station[index+1].price;
    		double nowDis = station[index].dis ;
    		double nexIndex;
    		if(station[index + 1].dis - station[index].dis>longDis){
    			printf("The maximum travel distance = %.2f",nowDis+longDis);
    			return 0;
    		}
    		for(int j = index+1 ;j<=N && (station[j].dis - nowDis)<=longDis;j++){		
    			if(station[j].price >= station[index].price){
    				if(station[j].price <= minPri ){
    					nexIndex = j;
    					minPri  = station[j].price;
    				}				
    			}
    			else{
    				nexIndex = j;
    				minPri = station[j].price;
    				break;
    			}
    		}
    		if(minPri >station[index].price){
    			totCost += (C-leftCap) * station[index].price;
    			leftCap = C - (station[nexIndex].dis - nowDis)/Davg;
    		}
    		else{
    			double tmp  = (station[nexIndex].dis - nowDis)/Davg;
    			if(tmp > leftCap){
    				totCost +=(tmp - leftCap) * station[index].price;
    				leftCap = tmp;
    			}
    			leftCap -= tmp;
    		}
    		totDis = station[nexIndex].dis;
    		index  = nexIndex;
    	}
    	printf("%.2f",totCost);
    	return 0;
     } 
    

      题意;从起点经过多个加油站到达终点,求最小花费,不能到达,求最远距离;

      总结:

          贪心策略,找能到达的首个油价比当前油价低的加油站,如果都没有,找能到达的最便宜的;

         初始邮箱为空,如果起点没有加油站,那么哪都去不了

  • 相关阅读:
    Spring学习02——控制反转、依赖注入
    Spring学习01——HelloSpring
    $(function() {})和$(document).ready(function(){ })
    tomcat 学习
    XML学习
    使用git提交项目至github的标准步骤
    Bootstrap快速入门
    HashMap底层原理及面试问题 [更新中]
    ArrayList remove()元素遇到的问题
    linux 给指定用户分配文件夹权限
  • 原文地址:https://www.cnblogs.com/zxzmnh/p/12127538.html
Copyright © 2020-2023  润新知