基本思路:

一开始确实没什么思路,因为觉得怎么着都会超时,然后看一下数据范围,呵,怎么都不会超时。

思路:

1.看到能改变线路,想到可以用以下区间dp,区间dp的话,先枚举长度,枚举开始位置,然后枚举中间点 dp[i][j]=min(dp[i][j],dp[i][z]+dp[z][j]+k);

2.然后每段时间最短路究竟是多少,然后因为不会超时,所以就二重循环枚举就好了

(ps:这里要说明一下给自己提个醒:

  spfa就是队列优化的迪杰斯特拉,然后的话vis数组每次出一个就置零一个,如果不置零是错的

  堆优化的迪杰斯特拉自己之前也加vis,而且每次出一个的话不置零,不会错,因为vis数组是不必要的

  所以以后写的话一般就写spfa好了,堆优化的迪杰斯特拉的话略难写一点,而且两者速度也差不多

  普通的迪杰斯特拉的话还是要置零的,因为比起spfa就是优化在了队列

代码如下:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<algorithm>
#include<queue>using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;
const int maxn = 100+10;int head[maxn],cnt;
struct Edge{int to,val,next;
}edge[maxn<<4];
ll tim[maxn][maxn],f[maxn][maxn];
bool flag[maxn][maxn],block[maxn],vis[maxn];
int dis[maxn];
int n,m,k;void add(int u,int v,int w){edge[cnt].to=v;edge[cnt].val=w;edge[cnt].next=head[u];head[u]=cnt++;
}
int spfa(int s,int e){memset(block,false,sizeof(block));memset(vis,false,sizeof(vis));memset(dis,inf,sizeof(dis));queue<int>q;q.push(1);vis[1]=true;dis[1]=0;for(int i=s;i<=e;i++){for(int j=1;j<=m;j++){if(flag[i][j]){block[j]=true;}}}while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;int w=edge[i].val;if(!block[v]&&dis[v]>dis[u]+w){dis[v]=dis[u]+w;if(!vis[v]){vis[v]=true;q.push(v);}}}vis[u]=false;}return dis[m];
}
void dp(){for(int l=1;l<=n;l++){for(int s=1;s<=n;s++){int e=s+l-1;if(e>n) continue;f[s][e]=(ll)tim[s][e]*(e-s+1);for(int z=s;z<e;z++){f[s][e]=min(f[s][e],f[s][z]+k+f[z+1][e]);}}}
}
int main(){memset(head,-1,sizeof(head));cnt=0;int p;scanf("%d%d%d%d",&n,&m,&k,&p);for(int i=1;i<=p;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);add(u,v,w);add(v,u,w);}int q;scanf("%d",&q);for(int i=1;i<=q;i++){int id,u,v;scanf("%d%d%d",&id,&u,&v);for(int j=u;j<=v;j++){flag[j][id]=true;}}for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){tim[i][j]=spfa(i,j);}}dp();cout<<f[1][n]<<endl;return 0;
}

  

转载于:https://www.cnblogs.com/imzscilovecode/p/8974488.html

bzoj 1003物流运输 区间dp+spfa相关推荐

  1. BZOJ 1003 物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 6766  Solved: 2796 [Submit][St ...

  2. [BZOJ]1003 物流运输题解

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

  3. BZOJ 1003 物流运输 最短路+dp

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1003 题目大意: 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才 ...

  4. BZOJ 1003 物流运输trans dijstra+dp

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1003 题意: 题解: 首先我们必须机智的知道f[i]=min(f[i],f[j]+cos ...

  5. P1772 [ZJOI2006]物流运输(线性dp+最短路径)

    P1772 [ZJOI2006]物流运输 题意 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头 A 运到码头 B.由于货物量比较大,需要 nnn 天才能运完.货物运输过程中一般要转 ...

  6. 【BZOJ】1003: [ZJOI2006]物流运输trans(SPFA+DP)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1003 这题一开始看是不会的额,,,还是看题解了..一开始我觉得不能用最短路啥的,,看了题解发现这是d ...

  7. 【洛谷 - P1772 】[ZJOI2006]物流运输(dp)

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

  8. BZOJ 3875: [Ahoi2014Jsoi2014]骑士游戏 dp spfa

    3875: [Ahoi2014&Jsoi2014]骑士游戏 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 933  Solved: 475 ...

  9. BZOJ1003: [ZJOI2006]物流运输trans(DP)

    传送门 额,这道题拿到过后没有什么有建树的想法--甚至根本就没有往DP哪方面去向(还是题见少了,人太笨了--)所以就偷偷的看了一下discuss,看到了状态转移方程才恍然大悟. f(i)=f(j)+d ...

最新文章

  1. 构建负载均衡服务器之二 LVS详解及应用
  2. 原来JScript中的关键字'var'还是有文章的
  3. 视频监控日常使用存在哪些故障
  4. ElasticSearch elasticsearch-servicewrapper 在linux上的安装部署全程记录
  5. 1080 两个数的平方和(数学)
  6. 《疯狂动物城》电脑壁纸
  7. 使用Jmeter进行http接口测试
  8. .git文件夹_将Git存储库中的文件夹转换为全新的存储库
  9. Gradle标准project属性
  10. 计算机控制面板图标怎么删除,电脑如何找回消失的“添加或删除程序”图标
  11. 基于Linux和MiniGUI的嵌入式系统软件开发指南(五)
  12. ​最高要价 8888元,小米 11 邀请函现身闲鱼;荣耀与微软签署全球 PC 合作协议;Xfce 4.16 发布|极客头条...
  13. 4代hiv检测50元_50元的乙肝两对半体检,值得吗?检测前,5种行为不要做
  14. Android ToggleButton(状态切换按钮)
  15. 分布式事务解决方案之可靠消息最终一致性
  16. 【win10】装机必备推荐软件,提升你的计算机使用效率!
  17. 从运营到高管,这是我总结的运营人能力地图
  18. 维控触摸屏编程手册_维控触摸屏ab plc地址编程实例
  19. Masscan教程和入门手册
  20. java调用海康人脸识别机5603的sdk的使用总结(一)

热门文章

  1. 3B大战引来的担忧:百度重仓云计算拟摆脱困局
  2. html5 微格式,HTML5 微格式和相关的属性名称
  3. Linux和Windows下计算文件的Hash值
  4. leetcode —— 34. 在排序数组中查找元素的第一个和最后一个位置
  5. Java使用math3实现矩阵行求和(求行均值)
  6. 算术编码原理与实现【转载】
  7. android系统存储路径在哪里,Android 手机存储目录
  8. bert预训练模型解读_超越谷歌BERT!依图预训练语言理解模型入选NeurIPS
  9. SLF4J和Logback日志框架详解
  10. Neginx服务搭建