主要说几个坑
1.给出的点需要根据下标排序。
2.根据不同的方式要把起始点或者终点加进去。我没有转换距离,而是直接从起始点到终点根据距离不断相减判断的,那么起点就是25,所以要把终点0加进去。如果转换距离的话,终点就是相对于出发点25。这个根据个人选择。
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\n"); 29 return; 30 } 31 next = next - pq.top(); 32 pq.pop(); 33 ans++; 34 } 35 pq.push(Data[i].p); 36 } 37 printf("%d\n", 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 }
原文:https://www.cnblogs.com/dybala21/p/10130849.html