码迷,mamicode.com
首页 > 其他好文 > 详细

LA 3983 Robotruck

时间:2014-08-24 23:32:43      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   ar   art   

这道题感觉挺吃力的,还用到了我不熟悉的优先队列

题目中的推导也都看明白了,总之以后还要多体会才是

先把代码贴上:

 

bubuko.com,布布扣
 1 //#define LOCAL
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int maxn = 100000 + 10;
 8 int x[maxn], y[maxn];
 9 int total_dist[maxn], total_weight[maxn], dist2origin[maxn];
10 int q[maxn], d[maxn];
11 
12 int func(int i)
13 {
14     return d[i] - total_dist[i+1] + dist2origin[i+1];
15 }
16 
17 int main(void)
18 {
19     #ifdef LOCAL
20         freopen("3983in.txt", "r", stdin);
21     #endif
22 
23     int T;
24     scanf("%d", &T);
25     while(T--)
26     {
27         int c, n, w, front, rear;
28         scanf("%d%d", &c, &n);
29         total_dist[0] = total_weight[0] = x[0] = y[0] = 0;
30         for(int i = 1; i <= n; ++i)
31         {
32             scanf("%d%d%d", &x[i], &y[i], &w);
33             dist2origin[i] = x[i] + y[i];
34             total_dist[i] = total_dist[i-1] + abs(x[i] - x[i-1]) + abs(y[i] - y[i-1]);
35             total_weight[i] = total_weight[i-1] + w;
36         }
37         front = rear = 1;
38         for(int i = 1; i <= n; ++i)
39         {
40             while(front <= rear && total_weight[i] - total_weight[q[front]] > c)
41                 ++front;
42             d[i] = func(q[front]) + total_dist[i] + dist2origin[i];
43             while(front <= rear && func(q[rear]) >= func(i))
44                 --rear;
45             q[++rear] = i;
46         }
47         printf("%d\n", d[n]);
48         if(T)    printf("\n");
49     }
50     return 0;
51 }
代码君

 

LA 3983 Robotruck

标签:style   blog   http   color   os   io   for   ar   art   

原文地址:http://www.cnblogs.com/AOQNRMGYXLMV/p/3933776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!