题目


分析

改变航线可以通过费用提前计算实现,

这样就不用增加次数这一维,也没有必要,

设\(dp[i]\)表示前\(i\)天的总费用

那么\(dp[i]=\min\{dp[j-1]+(i-j+1)*mindis+cost\}\)

记录每个点在\([j,i]\)是否能被经过倒序就不用清空次数过多

再套一个SPFA求最短路径即可


代码

#include <cstdio>
#include <cctype>
#include <queue>
#include <cstring>
#define rr register
using namespace std;
struct node{int y,w,next;}e[1001];
int dis[21],ls[21],v[21]; queue<int>q;
int dp[101],lim[21],limit[101][21],k=1,day,n,m,cost;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline signed spfa(){
memset(dis,42,sizeof(dis));
dis[1]=0,v[1]=1,q.push(1);
while (q.size()){
rr int x=q.front(); q.pop();
for (rr int i=ls[x];i;i=e[i].next)
if (dis[e[i].y]>dis[x]+e[i].w&&!lim[e[i].y]){
dis[e[i].y]=dis[x]+e[i].w;
if (!v[e[i].y]) v[e[i].y]=1,q.push(e[i].y);
}
v[x]=0;
}
return dis[n];
}
signed main(){
day=iut(),n=iut(),cost=iut(),m=iut();
for (rr int i=1;i<=m;++i){
rr int x=iut(),y=iut(),w=iut();
e[++k]=(node){y,w,ls[x]},ls[x]=k,
e[++k]=(node){x,w,ls[y]},ls[y]=k;
}
for (rr int Q=iut();Q;--Q){
rr int x=iut(),l=iut(),r=iut();
for (rr int j=l;j<=r;++j) limit[j][x]=1;
}
memset(dp,42,sizeof(dp));
dp[0]=-cost;
for (rr int i=1;i<=day;++i){
for (rr int j=1;j<=n;++j) lim[j]=0;
for (rr int j=i;j>=1;--j){
for (rr int k=1;k<=n;++k)
lim[k]|=limit[j][k];
rr int now=spfa();
if (now>=7e8) break;
dp[i]=min(dp[i],dp[j-1]+(i-j+1)*now+cost);
}
}
return !printf("%d",dp[day]);
}

#SPFA,动态规划#洛谷 1772 [ZJOI2006]物流运输的更多相关文章

  1. 洛谷P1772 [ZJOI2006]物流运输

    P1772 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线 ...

  2. 洛谷P1772 [ZJOI2006]物流运输 题解

    题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...

  3. [luogu] P1772 [ZJOI2006]物流运输(动态规划,最短路)

    P1772 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线 ...

  4. bzoj1003: [ZJOI2006]物流运输(DP+spfa)

    1003: [ZJOI2006]物流运输 题目:传送门 题解: 可以用spfa处理出第i天到第j都走这条路的花费,记录为cost f[i]表示前i天的最小花费:f[i]=min(f[i],f[j-1] ...

  5. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: ...

  6. [ZJOI2006]物流运输(动态规划,最短路)

    [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个 ...

  7. luoguP1772 [ZJOI2006]物流运输 x

    P1772 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线 ...

  8. [ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5999  Solved: 2473[Submit][Stat ...

  9. bzoj1003 [ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6300  Solved: 2597[Submit][Stat ...

  10. 【bzoj1003】[ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6331  Solved: 2610[Submit][Stat ...

随机推荐

  1. Redis搭建Sentinel实验环境

    环境准备 在物理机上启动3台虚拟机,IP地址分别为:192.168.56.4,192.168.56.5,192.168.56.6. 1.确保3台虚拟机的网络是相互联通的. 2.确保已经在3台虚拟机上安 ...

  2. ContentType组件表使用

    https://www.shuzhiduo.com/A/qVdepN2r5P/

  3. 【LeetCode二叉树#01】二叉树的遍历(递归/迭代)

    二叉树递归遍历 写递归算法时候需要遵循的三个点: 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函 ...

  4. 【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?

    通过PSLIST查看Windwos中的进程信息及线程信息 一:下载PSLIST小工具:https://docs.microsoft.com/en-us/sysinternals/downloads/p ...

  5. 50条MAUI踩坑记

    1. 目录结构: (1)_imports.razor是一个全局using namespace的地方 (2)Platforms下的代码,虽然都放在同一个项目下,但是Platforms\Android下的 ...

  6. Java 线程通信的应用:经典例题:生产者/消费者问题

    1 package bytezero.threadcommunication; 2 3 /** 4 * 线程通信的应用:经典例题:生产者/消费者问题 5 * 6 * 7 * 8 * @author B ...

  7. Java 创建类,对象+调用方法

    1 //测试类 2 public class PersonTest 3 { 4 public static void main(String[] args) 5 { 6 //创建Person类的对象 ...

  8. Zabbix“专家坐诊”第185期问答汇总

    问题一 Q:Zabbix5.0版本,如图,请问这里怎么修改回localhost? A:找到文件conf/zabbix.conf.php,改下图这个位置 问题二 Q:大家好,我有个疑问请教下,zabbi ...

  9. PWR & 低功耗三种模式

    睡眠模式: int main(void) { OLED_Init(); OLED_ShowString(1, 1, "RxData:"); Serial_Init(); while ...

  10. vscode 文件上传快捷键 shift+alt+s (ftp专用)插件用的 ftp-sync

    vscode 文件上传快捷键 shift+alt+s (ftp专用)插件用的 ftp-sync { "key": "shift+alt+s", "co ...