P4009 汽车加油行驶问题
最短路
清一色的spfa....送上一个堆优化Dijkstra吧(貌似代码还挺短)
顺便说一句,堆优化Dj跑分层图灰常好写
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
template <typename T> inline T min(T &a,T &b) {return a<b ?a:b;}
struct data{ //对于不同题目的要求,我们只需要在结构体中按题意增减变量即可
int d,x,y,k; //d:费用 x,y:坐标 k:油量
bool operator < (const data &tmp) const {return d>tmp.d;}
}; priority_queue <data> h;
int d1[]={,,,-};
int d2[]={,,-,};
int n,tk,a,b,c,ans=2e9,d[][][],oil[][];
int main(){
scanf("%d%d%d%d%d",&n,&tk,&a,&b,&c);
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
scanf("%d",&oil[i][j]);
memset(d,,sizeof(d));
h.push((data){d[tk][][]=,,,tk}); //优先队列直接放结构体
while(!h.empty()){
data u=h.top(); h.pop();
if(u.d!=d[u.k][u.x][u.y]) continue; //记忆化
if(!u.k) u.k=tk,u.d+=a+c; //没油了就新建一个油库并加油
for(int i=;i<;++i){
int r1=u.x+d1[i],r2=u.y+d2[i],cost= i> ? b:; //cost:当向左或向上是要加的费用
if(r1<||r1>n||r2<||r2>n) continue;
if(oil[r1][r2]){ //有油库必须加满
if(u.d+cost+a<d[tk][r1][r2]){
d[tk][r1][r2]=u.d+cost+a;
h.push((data){d[tk][r1][r2],r1,r2,tk});
}
}else if(u.d+cost<d[u.k-][r1][r2]){ //普通的行驶
d[u.k-][r1][r2]=u.d+cost;
h.push((data){d[u.k-][r1][r2],r1,r2,u.k-});
}
}
}
for(int i=;i<=tk;++i) ans=min(ans,d[i][n][n]); //查找最小值
printf("%d",ans);
return ;
}
P4009 汽车加油行驶问题的更多相关文章
- 洛谷 P4009 汽车加油行驶问题 解题报告
P4009 汽车加油行驶问题 题目描述 给定一个\(N×N\)的方形网格,设其左上角为起点◎,坐标(1,1) ,\(X\)轴向右为正,\(Y\)轴向下为正,每个方格边长为1 ,如图所示. 一辆汽车从起 ...
- 洛谷P4009 汽车加油行驶问题
题目描述 给定一个 N \times NN×N 的方形网格,设其左上角为起点◎,坐标(1,1)(1,1),XX 轴向右为正, YY 轴向下为正,每个方格边长为 11 ,如图所示. 一辆汽车从起点◎出发 ...
- 洛谷P4009汽车加油行驶问题——网络流24题(最短路)
题目:https://www.luogu.org/problemnew/show/P4009 网络流24题中不是网络流的最短路题: 把每个点拆成各个油量上的点,根据要求连边即可: 注意:点数最大为10 ...
- 洛谷P4009 汽车加油行驶问题(分层最短路)
传送门 说好的网络流24题呢……上次是状压dp,这次怎么又最短路了…… 不过倒是用这题好好学了一下分层图最短路 把每一个位置$(x,y)$,油量剩余$k$表示为一个状态,然后转化成一个$n$进制数,这 ...
- 洛谷 P4009 汽车加油行驶问题 【最小费用最大流】
分层图,建k层,设(i,j,0)为点(i,j)的满油状态,全图的流量都是1,因为重复走到一个点没有意义.如果当前点是加油站,那么它向它上左的点连费用为a的边,向下右连费用为a+b的边: 否则,这个点的 ...
- Luogu P4009 汽车加油行驶问题
题目链接 \(Click\) \(Here\) 分层图..好长时间没写差点要忘了\(hhhhh\),其实思路还是很明了的. 注意需要强制消费. #include <bits/stdc++.h&g ...
- 【题解】【网络流24题】汽车加油行驶问题 [P4009] [Loj6223]
[题解][网络流24题]汽车加油行驶问题 [P4009] [Loj6223] 传送门:汽车加油行驶问题 \([P4009]\) \([Loj6223]\) [题目描述] 给出一个 \(N \times ...
- 【网络流24题】 No.15 汽车加油行驶问题 (分层图最短路i)
[题意] 问题描述:给定一个 N*N 的方形网格,设其左上角为起点◎, 坐标为( 1, 1), X 轴向右为正, Y轴向下为正, 每个方格边长为 1, 如图所示. 一辆汽车从起点◎出发驶向右下角终点▲ ...
- 【刷题】LOJ 6223 「网络流 24 题」汽车加油行驶问题
题目描述 给定一个 \(\text{N}\times \text{N}\) 的方形网格,设其左上角为起点◎,坐标为 \(\text{(1,1)}\) ,\(\text{X}\) 轴向右为正, \(\t ...
随机推荐
- iOS SwiftMonkey 随机暴力测试
参考源文章 https://github.com/zalando/SwiftMonkey https://kemchenj.github.io/2017/03/16/2017-03-16/ 简介 这个 ...
- Python之logging日志模块
logging 用于便捷既然日志切线程安全的模块 vim log_test.py import logging logging.basicConfig(filename='log.log', form ...
- 洛谷P2463 Sandy的卡片【后缀数组】【二分】
题目描述 Sandy和Sue的热衷于收集干脆面中的卡片. 然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型. 每一张卡片都由一些数字进行标记,第i张卡片的 ...
- ubuntu14.04下编译支持opengl的opencv
在学习基于opencv的AR时,编译程序遇到报错,发现opencv不支持opengl.网上原因得知,在编译opencv时,opencv2.4以后的版本中默认ENABLE_OPENGL = NO,只需要 ...
- Sublime2或3配置R、Scala、Python交互式环境
1.Sublime3的下载地址:http://www.sublimetext.com/3 2.刚刚安装的软件是没有PackageControl的,需要在新安装使用 (1) 以前没有安装过Packa ...
- Spyer中添加一些常用包的方法
我用的是Anaconda中的Spyer编译,在导入包pyaudio时,发现找不到,需要手工导入.可以打开Anacoda promt,查看已经安装的包名用:pip list Spyer中的所有包在这里安 ...
- h5直播
直播开发之旅 ① 状态控制: 目前我们先考虑直播的三种状态: 直播前,直播中,结束. 针对每个状态我们肯定会有不同的显示,这三种状态可以是三个页面,相互切换,或者一个页面,控制页面相关隐藏和显示. 可 ...
- pip freeze
总结: 1.输出安装的包信息,并在另一个环境快速安装 Generate output suitable for a requirements file. $ pip freeze docutils== ...
- 15款Django开发常用软件包(转)
原文:http://www.iteye.com/news/28697 Django是一款高级的Python Web框架,可以帮助开发者快速创建web应用.我们这里整理了15款Django开发中常用的软 ...
- 新版微信小程序即将上线 新增微信支付功能
<经济参考报>消息,新版微信小程序正在测试中,有可能将在近期正式上线.新版小程序增加了“附近门店”功能的接口,微信用户可以通过定位功能,查看提供线下服务的各类门店,并直接利用小程序实现包括 ...