1003: [ZJOI2006]物流运输 = DP+SBFA
2024-09-30 01:05:11
题意就是告诉你有n个点,e条边,m天,每天都会从起点到终点走一次最短路,但是有些点在某些时间段是不可走的,因此在某些天需要改变路径,每次改变路径的成本是K,总成本=n天运输路线长度之和+K*改变运输路线的次数。问如果走才能使得的总成本最小。
首先我们需要标记S这个点,在l到r天范围内,不可走,我们开始肯定是想那么开个数组把,那么开一个数组a[p][j]表示P这个点在第j天是不可走的,然后用链式前向星建边,连接。但是这个题我们改如何才能求到N天的最小成本呢???
这个我感觉也是很经典的问题了,DAG上的动态规划啊!!!
我们用一个cost数组表示cost[i][j]中,i到j天范围内的最短路,用一个flag[k] |= a[k][l]表示k点在l天的情况。。。因此我们有一个牛逼的式子
for (int k=;k<=m;k++)
for (int l=i;l<=j;l++)
flag[k]|=a[k][l];
这样就可以表示在L到R区间内的可走性,如果其中任何一个点在L-R天中的任何一天不可用,那么在L到R区间一定不可用
然后我们可以轻易的理工SBFA求出L到R区间内的最短路,最后转化为成本,最后我们我们用一个DP数组,转移方程是
dp[i]=min(dp[i],dp[j]+cost[j+1][i]+k);
意思是我从起点到i点,和从起点到j点,j点到 i 的距离的消耗进行比较,取最后的即可这样我们通过这个小DP,使得范围不断 扩大。
最后得到答案
最新文章
- presto的动态化应用(一):presto节点的横向扩展与伸缩
- JavaScript学习笔记-商品管理新增/删除/修改功能
- 客户端判断是否为IE9以上版本
- django-cms 代码研究(七)杂七杂八
- C++中颜色的设置
- MySQL时间戳和时间格式转换函数
- ESP8266 TCP传输AT指令顺序
- IOS AVAUDIOPLAYER 播放器使用
- [视频转换] C#VideoConvert视频转换帮助类 (转载)
- 201521123031 《Java程序设计》 第十周学习总结
- 如何将一个div水平垂直居中?4种方法做推荐
- composer在update时提示file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO
- mysql5.7安装记录
- mac 下node,yarn安装及版本切换
- nginx负载均衡优化配置
- Gym 101775C - Traffic Light - [思维题]
- Zeu.js
- [内核驱动] miniFilter 内核层与应用程序通信
- StringBuilder的实现与技巧ZZ
- Spartan6 slave SelectMap configuration fails owing to JTAG?
热门文章
- django加密解密api
- Elasticsearch深入搜索之结构化搜索及JavaAPI的使用
- CENTOS7错误:Cannot find a valid baseurl for repo: base/7/x86_6
- UITableView的分割线长短的控制
- Linux下编译安装redis
- LeetCode算法题-Add Digits(Java实现-3种解法)
- 远程连接ubuntu的MongoDB遇到的坑
- Jenkins+Ansible+Gitlab自动化部署三剑客-gitlab本地搭建
- http: server gave HTTP response to HTTPS client &; Get https://192.168.2.119/v2/: dial tcp 192.168.2.119:443: getsockopt: connection refused
- 微信小程序接入,https服务器搭建和调试