pat1033汽车加油问题(Java贪心)

简介: 这题就是说汽车开始0油,然后给出总路程,每公里汽车能够跑的路程,测试用例数量,每个测试用例给出价钱和距离。这题刚开始没有思路,以前见过没有思路后来绕过去没想到在pat上又遇到了,看了题解后来恍然大悟,这个贪心技巧以前没有见过。

这题就是说汽车开始0油,然后给出总路程,每公里汽车能够跑的路程,测试用例数量,


每个测试用例给出价钱和距离。这题刚开始没有思路,以前见过没有思路后来绕过去没想到在pat上又遇到了,看了题解后来恍然大悟,这个贪心技巧以前没有见过。


  • 具体的贪心思路:核心:将油预储存,将油分成块,背包里可能多个地方的油但是不一定用,每到一个地方都要把油加满。这里就是处理的核心关键:加油的时候淘汰背包里面价格比当前位置贵的油。每次使用油的时候,有限用最便宜的油,如果没用完还要考虑。


  • 用treemap存入<距离,价格>,因为要从0开始经过。保证可能达到的所有情况可以到达。用优先队列存入当前油,当然,你还要记录油的总量,钱的总量和当前位置,还要判断油是否能够到达当前点。


  • 但是这个是double类型变量,,准确度。。。吐槽一下,我在牛客的最后一个案例错了,但是到pat官网上全部通过,我复制牛客上AC代码到pat上就过了三组数据,,真坑!附上代码:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Comparator;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
public class Main {
  public static void main(String[] args) throws IOException {
    StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    in.nextToken();
    double cmax=in.nval;//最大容量
    in.nextToken();double distance=in.nval;//距离
    in.nextToken();double ave=in.nval;//每一个气能跑的距离
    in.nextToken();int n=(int)in.nval;//数量
    Map map=new TreeMap();
    map.put(distance, Double.MAX_VALUE);
    for(int i=0;iq1=new PriorityQueue(cmp);//两个做中转处理
    Queueq2=new PriorityQueue(cmp);
    for(double k:map.keySet())
    {
      //if(k>=distance) {k=distance;}
      if(oilnumber*ave<(k-index)) {b=true;index =oilnumber*ave;break;}//跑到截至
      else
      {
        double length=0;
        while(length(k-index))//能够多出部分
          {
            oilnumber-=(k-index-length)/ave;
            exam.value-=(k-index-length)/ave;
            money =(k-index-length)/ave*exam.price;
            length=k-index;
            q1.add(exam);
          }
          else//跑不完
          {
            money =exam.value*exam.price;
            oilnumber-=exam.value;
            length =exam.value*ave;
          }
        }
        index=k;
        //开始加油工作//淘汰旧油
        if(k=distance) {break;}
      }
      //out.println(" " k " " map.get(k) " " money);
    }
    if(index==distance)
    out.println(String.format("%.2f", money));
    else
      out.println("The maximum travel distance = " String.format("%.2f", index));
    out.flush();
  }
public  static Comparatorcmp=new Comparator() {
  @Override
  public int compare(oil o1, oil o2) {    
    return (o1.price-o2.price)>0?1:-1;
  }       
  };
public  static class oil
  {
  public  double price;//价格
  public  double value;//余量
    public oil() {
    }
    public oil(double price,double value)
    {
      this.price=price;
      this.value=value;
    }
  }
}


大体的逻辑没啥问题,对集合的掌握理解要高,可能有些小瑕疵如果发现请找出来。

目录
相关文章
|
10月前
|
Java 数据库 Android开发
汽车出租系统【纯控制台】(Java课设)
汽车出租系统【纯控制台】(Java课设)
46 1
|
10月前
|
安全 Java 数据库连接
【Java每日一题】——第二十八题:编程定义一个学生类汽车类Car
【Java每日一题】——第二十八题:编程定义一个学生类汽车类Car
|
10月前
|
NoSQL Java 关系型数据库
基于java swing和mysql实现的汽车租赁管理系统(源码+数据库+文档+运行指导视频)
基于java swing和mysql实现的汽车租赁管理系统(源码+数据库+文档+运行指导视频)
339 0
|
5月前
|
Java 数据库
基于java的汽车服务管理系统(Car Service Management System)
基于java的汽车服务管理系统(Car Service Management System)
43 0
|
10月前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
9月前
|
存储 Java 关系型数据库
基于Java的汽车在线销售系统
基于Java的汽车在线销售系统
|
10月前
|
JavaScript Java 测试技术
基于Java的汽车维修保养智能预约系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的汽车维修保养智能预约系统的设计与实现(源码+lw+部署文档+讲解等)
87 2
|
10月前
|
JavaScript Java 测试技术
基于Java的汽车客运订票系统 的设计与实现(源码+lw+部署文档+讲解等)
基于Java的汽车客运订票系统 的设计与实现(源码+lw+部署文档+讲解等)
89 2
|
SQL Java 数据库
JSP汽车销售管理系统myeclipse开发sql计算机程序web结构java编程网页源码
JSP 汽车销售管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发
97 0
|
前端开发 Java 数据库连接
JAVA汽车租赁系统(JAVA毕业设计)
JAVA汽车租赁系统(JAVA毕业设计)
208 0

热门文章

最新文章