题意:有n个垃圾,第i个垃圾坐标为(xi,yi)。有一个机器人按照编号从小到大哦捡起所有的垃圾并扔进垃圾桶,垃圾桶再远点。机器人手中垃圾总重量不能超过C,两点之间的距离为曼哈顿距离,求机器人行走的最短总路程

分析:d[i]=min{d[j]+dist2origin(j+1)+dist(j+1,i)+dist2origin(i)|j<=i, w(j+1,i)<=c}

里面可以写成函数f以简化计算

代码:

View Code

 1 #include <stdio.h>
 2 #include <algorithm>
 3 using namespace std;
 4 const int MAXN = 100000 + 10;
 5 int x[MAXN], y[MAXN];
 6 int total_dist[MAXN], total_weight[MAXN], dist2origin[MAXN];
 7 int q[MAXN], d[MAXN];
 8 #define DEBUG
 9 int func(int i){
10     return d[i]-total_dist[i+1]+dist2origin[i+1];
11 }
12
13 int main(){
14 #ifndef DEBUG
15     freopen("in.txt", "r", stdin);
16 #endif
17     int T, c, n, w, front, rear;
18     scanf("%d", &T);
19     while(T--){
20         scanf("%d%d", &c, &n);
21         total_dist[0] = total_weight[0] = x[0] = y[0] = 0;
22         int i;
23         for(i=1; i<=n; i++){
24             scanf("%d%d%d", &x[i], &y[i], &w);
25             dist2origin[i] = abs(x[i])+abs(y[i]);
26             total_dist[i] = total_dist[i-1] + abs(x[i]-x[i-1])+abs(y[i]-y[i-1]);
27             total_weight[i] = total_weight[i-1] + w;
28         }
29         front = rear = 1;
30         for(i=1; i<=n; i++){
31             while(front<=rear && total_weight[i]-total_weight[q[front]]>c) front++;
32             d[i]=func(q[front])+total_dist[i]+dist2origin[i];
33             while(front<=rear && func(i)<=func(q[rear])) rear--;
34             q[++rear] = i;
35         }
36         printf("%d\n", d[n]);
37         if(T>0) printf("\n");
38     }
39     return 0;
40 }

今天感觉做题目不很在状态,直接看了训练指南上的分析。。

最新文章

  1. php BC高精确度函数库
  2. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...
  3. 用Unity3D实现简单的牧师与魔鬼游戏
  4. 虚拟机上php5.6安装教程,手把手安装linux虚拟机教程
  5. C++描述杭电OJ 2017.字符串统计||
  6. Deppin系统软件打开备注
  7. 深度学习自学(二十三):CAFFE-TF环境安装问题-兼容多个CUDA
  8. NOIP2018初赛 解题报告
  9. DW-32-rec_sys-Task04
  10. 如何制作win7 U盘安装盘
  11. 知识点滴 - 有关剧本的网站
  12. JC-1、python学习笔记
  13. 小心肝队-冲刺日志(第八天)
  14. 状态模式教你学会清蒸鲤鱼
  15. 一次性消费品商城小程序开发,生活更便捷
  16. ati linux驱动下载,安装 ATI 驱动 for linux
  17. Redhat7升级内核(含安装yum)
  18. 2019-12-20
  19. 【Python】豆瓣FM API分析
  20. oracle数据库dbmon授权,Oracle数据库监控软件 MyDBMon 工具 下载 系统

热门文章

  1. 怎样调整input框背景颜色_还在用百度搜索PPT背景图?7个高大上的图片网站,个个都是高清免费无版权!...
  2. 计算机作业老师会批改吗,小学和初中生家长每天都按照老师的要求批改作业吗?...
  3. win10安装mysql报错——无法项识别为 cmdlet、函数、脚 本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
  4. Ubuntu安装C++环境(VsCode 编译器)
  5. 7-8 黑洞数 (20 分)
  6. 1031 查验身份证 (15 分)—PAT (Basic Level) Practice (中文)
  7. RK3288_Android7.1接eDP屏休眠之后led状态灯没有亮红色
  8. 【CF734F】Anton and School(构造)
  9. ios中UIView和CALayer关系
  10. 世界是数字的读后感: