POJ_2431 Expedition 【数据结构】

一、题面

POJ2431

二、分析

主要说几个坑

1.给出的点需要根据下标排序。

2.根据不同的方式要把起始点或者终点加进去。我没有转换距离,而是直接从起始点到终点根据距离不断相减判断的,那么起点就是25,所以要把终点0加进去。如果转换距离的话,终点就是相对于出发点25。这个根据个人选择。

三、AC代码

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <queue>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 struct Node
 8 {
 9     int l, p;
10     bool operator<(const Node t)const
11     {
12         return l > t.l;
13     }
14 }Data[10003];
15 int N, L, P;
16 
17 void solve()
18 {
19     int ans = 0, next = L-P;
20     priority_queue<int> pq;
21     
22     for(int i = 0; i < N; i++)
23     {
24         while(Data[i].l < next)
25         {
26             if(pq.empty())
27             {
28                 printf("-1
");
29                 return;
30             }
31             next = next - pq.top();
32             pq.pop();
33             ans++;
34         }
35         pq.push(Data[i].p);
36     }
37     printf("%d
", ans);
38 }
39 int main()
40 {
41     // freopen("input.txt", "r", stdin);
42     // freopen("out.txt", "w", stdout);
43     while(scanf("%d", &N)!=EOF)
44     {
45         for(int i = 0; i < N; i++)
46         {
47             scanf("%d %d", &Data[i].l, &Data[i].p);
48         }
49         scanf("%d %d", &L, &P);
50         Data[N].l = 0, Data[N].p = 0;
51         N++;
52         sort(Data, Data+N);
53         solve();
54     }
55     return 0;
56 }
View Code
原文地址:https://www.cnblogs.com/dybala21/p/10130849.html