「一本通 3.2 练习 6」汽车加油行驶

news2024/12/25 9:10:21

目录

第一步,二维转一维(此步仅为方便,可以省略)

第二步,建边(啥都行,只要死不了)

第三部,bfs(你要dfs也行)

第一步

第二步

第三步

可C+A呢?

剪枝(vis数组登场了!)

总结

A+C记录:又要戳我!

结语:

我的第二道网络流二十四题

链接:戳我

题目大致意思放一下

给你一个N*N零一方阵,你在(1,1),可以沿着边走。当你往左上走的时候,要付B元。你的体力是K,
也就是说每走K条边就要停下来。如果当前节点(不论你还能走多少条边)是1,需付A元钱将体力补满;
你也可以在0的节点付A+C(注意有个A,我当年37分就是卡在这里)元钱将体力补满。问到达(N,N)
需要多少钱

第一步,二维转一维(此步仅为方便,可以省略)

第二步,建边(啥都行,只要死不了)

第三部,bfs(你要dfs也行)

下面正式开始

第一步

首先,先写一个函数,我把它叫做 kks(请见谅)

输入 x 与 y

返回对应下标。

就像这样

int kks(int x,int y){
    return (x-1)*(n)+y;
}

接着,就可以愉快的开一维了!

第二步

这一步谁都会,直接把配套代码放出来了(我写了个链式前向星)

struct edge{
    int v,nxt,w;
    void it(int av,int anxt,int aw){
        v=av,nxt=anxt,w=aw;
    }
}e[N*4];
int h[N],cnt;
void addE(int u,int v){
    e[++cnt].it(v,h[u],((v<u)?b:0));
    h[u]=cnt;
}
int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
bool hf(int abc){
    if(abc>0&&abc<=n)
        return 1;
    return 0;
}
for(int x=1;x<=n;x++)
        for(int y=1;y<=n;y++)
            for(int i=0;i<4;i++){
                int xx=dx[i]+x,yy=dy[i]+y;
                if(hf(xx)&&hf(yy))
                    addE(kks(x,y),kks(xx,yy));
            }

第三步

重点来了!

我在建立边的时候,加入了边权,B的问题解决了

同时,我把输入的01矩阵写进了一个叫need的数组里

那么,A也解决了

可C+A呢?

按照正常思路,每一次都要枚举一遍,明显容易超时

但是,细细研究就会发现,只要在油量为0的时候加一下(这就是贪心思想,没有死到临头就依然放纵)

并且,同一个地方,一辆车不可能到2次(肯定不是最优解)

因此,建的油箱我们可以不计入讨论

剪枝(vis数组登场了!)

  1. 在到达同一地点时,油量相同时花钱越少越好
  2. 在到达同一地点时,油量更多时花钱越少越好
  3. 剪枝要在C+A与A之前,因为你多费点钱加油还不如不加呢

总结

到此为止,基本思路框架已经出现,接着就是代码了(很乱,见谅)

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,a,b,c;
const int N=10407;
struct edge{
    int v,nxt,w;
    void it(int av,int anxt,int aw){
        v=av,nxt=anxt,w=aw;
    }
}e[N*4];
int h[N],cnt,need[N],ans=0x3f3f3f3f;
int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
int kks(int x,int y){
    return (x-1)*(n)+y;
}
bool hf(int abc){
    if(abc>0&&abc<=n)
        return 1;
    return 0;
}
void addE(int u,int v){
    e[++cnt].it(v,h[u],((v<u)?b:0));
    h[u]=cnt;
}
int vis[N][17];
struct p{
    int x,o,pr;
    p(int ax,int ao,int apr){x=ax;o=ao;pr=apr;}
    bool operator>(const p b) const{
        if(pr!=b.pr)
            return pr>b.pr;
        return o<b.o;
    }
};
void bfs(){
    memset(vis,0x3f,sizeof vis);
    priority_queue<p,vector<p>,greater<p>> pq;
    pq.push(p(kks(1,1),k,0));
    while(!pq.empty()){
        p now=pq.top();
        pq.pop();
        int x=now.x,o=now.o,pr=now.pr;
        //cout<<x<<" "<<o<<" "<<pr<<endl;
		int flg=0;
        if(x==kks(n,n)){
            ans=min(ans,pr);
            continue;
        }
		for(int i=o;i<=k;i++)
			if(vis[x][i]<=pr)
				flg=1;
		if(flg)
			continue;
        vis[x][o]=pr;
        if(need[x]&&o!=k)
            o=k,pr+=a;
        if(o==0)
            pr+=c+a,o=k;
        for(int i=h[x];i;i=e[i].nxt)
            pq.push(p(e[i].v,o-1,pr+e[i].w));
    }
}
signed main(){
    scanf("%lld%lld%lld%lld%lld",&n,&k,&a,&b,&c);
    for(int i=1;i<=n;i++)
        for(int j=1,ck;j<=n;j++){
            scanf("%lld",&ck);
            if(ck)
                need[kks(i,j)]=1;
        }
    for(int x=1;x<=n;x++)
        for(int y=1;y<=n;y++)
            for(int i=0;i<4;i++){
                int xx=dx[i]+x,yy=dy[i]+y;
                if(hf(xx)&&hf(yy))
                    addE(kks(x,y),kks(xx,yy));
            }
    bfs();
    printf("%lld",ans);
}

A+C记录:又要戳我!

结语:

这题可以作为网络流二十四题的入门题

最后,祝您端午节快乐!
冒泡排序,选择排序,插入排序,快速排序,堆排序,归并排序,希尔排序,桶排序,基数排序,端午节帮您排忧解难。 
有向图,无向图,有环图,无环图,完全图,稠密图,稀疏图,拓扑图祝您端午节宏图大展。
最长路,最短路,单源路径,所有节点对路径,祝您新年路路通畅。 
二叉树,红黑树,van Emde Boas树,最小生成树祝您端午节好运枝繁叶茂。
最大流,网络流,标准输入流,标准输出流,文件输入流,文件输出流,祝您端午节顺顺溜溜。
线性动规,区间动规,坐标动规,背包动规,树型动归为您的端午节规划精彩。
散列表,哈希表,邻接表,双向链表,循环链表帮您在端午节表达喜悦。
O(n!), O(2^n), O(n^3), O(n^2), O(nlog n), O(n), O(log n), O(1), 祝您端午节渐进步步高!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯专题-试题版-【01字符串】【2n皇后问题】【A+B问题】【Fibonacci数列】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

ECS 简略版说明一:Entities and components

目录 Entities and components Worlds and EntityManagers Archetypes Chunks Queries Entity IDs IComponentData Managed IComponentData components DynamicBuffer components Aspects Allocator overview Allocator.Temp Allocator.TempJob Allocator.Persis…

MySQL性能测试及调优中的死锁处理方法

目录 前言&#xff1a; 1、死锁检测 2、死锁避免 3、死锁解决 前言&#xff1a; MySQL死锁是指多个会话同时请求相同资源时发生的一种资源争用现象&#xff0c;导致会话无法继续执行。死锁的发生会导致事务无法提交或者回滚&#xff0c;影响应用程序的正常运行。因此&#xff0…

consul简介与安装

一、Consul简介 Consul 是 HashiCorp 公司推出的开源产品&#xff0c;用于实现分布式系统的服务发现、服务隔离、服务配置&#xff0c;这些功能中的每一个都可以根据需要单独使用&#xff0c;也可以同时使用所有功能。Consul 官网目前主要推 Consul 在服务网格中的使用。 与其…

【人工智能】教你如何让 AI 赢得贪吃蛇游戏----强化学习(初探)

人工智能--AI贪吃蛇&#xff0c;每一个代码都有详细的注释&#xff0c;希望多多收藏&#xff0c;点赞&#xff0c;评论 1.前言&#xff1a;训练ai玩游戏的可行性2.代码实现思路&#xff1a;3.代码完整实现3.1 Game Game.py 完整实现3.1.1 安装pygame库3.1.2 编写游戏逻辑代码 3…

Sangfor华东天勇战队:某咖啡还原密钥

最近学习了密钥还原&#xff0c;复现下并记录思路 function wbaes_encrypt_ecb(){var module_base Module.findBaseAddress("libcryptoDD.so")var func_base module_base.add(0x17BD41)Interceptor.attach(func_base,{onEnter:function (args){console.log("E…

风控引擎如何快速接入不同的数据源?

目录 数据是风控引擎的重要组成 风控引擎的数据接入 风控引擎是一种基于数据分析和机器学习算法的系统&#xff0c;能够实时识别和处理各种风险问题&#xff0c;适用于金融、电商、智能制造、交通运输等各领域&#xff0c;能够提高企业的风险管理水平和业务效率。 风控引擎主…

我心中的TOP1编程语言—JavaScript

作为一名研发工程师&#xff08;程序员&#xff09;&#xff0c;平时工作中肯定会接触或了解很多编程语言。每个人都会有自己工作中常用的语言&#xff0c;也会有偏爱的一些编程语言。而我心中的最爱&#xff0c;毫无疑问&#xff0c;就是 JavaScript。 JavaScript 是一门编程…

23. 数据结构之位图

前言 之前在讲散列表的时候&#xff0c;提到过位图的概念。位图&#xff08;Bitmap&#xff09;作为一种特殊的数据结构&#xff0c;它使用一系列位来表示数据&#xff0c;每个位只有两个状态&#xff08;0或1&#xff09;。由于它的高效性和节省空间的特性&#xff0c;位图在…

SpringBoot的配置环境属性

SpringBoot的配置环境属性 在本文中&#xff0c;我们将讨论SpringBoot的配置环境属性。我们将了解如何使用这些属性来配置我们的应用程序&#xff0c;以便在不同的环境中运行。我们还将了解如何使用SpringBoot的配置文件来管理这些属性。最后&#xff0c;我们将介绍一些最佳实…

java的嵌套类(nested class)、内部类(inner class)的区别

嵌套类即nested class&#xff0c;内部类即Inner class。 概括来说&#xff0c;嵌套类的概念比内部类概念大。嵌套类包含内部类和非内部类。一个内部类一定是一个嵌套类&#xff0c;但一个嵌套类不一定是一个内部类。 在一个类内部或者接口内部声明的类是嵌套类。 下面这些类是…

《Java面向对象程序设计教程》课后编程题

文章目录 第 1 章 Java 概述第 2 章 Java 语言基础第 3 章 Java 面向对象编程第 4 章 Java 图形用户界面程序设计第 5 章 Applet 设计第 6 章 Java 输入输出流与文件操作第 7 章 Java 的多线程机制第 9 章 常用工具类与集合框架 第 1 章 Java 概述 试编写 Java 程序&#xff0…

Android studio新建项目运行遇到的问题

文章目录 The emulator process for AVD xxx has terminated原因&#xff08;环境变量问题&#xff09;解决其他原因 新建的练习项目更改SDK默认位置更改方法 The emulator process for AVD xxx has terminated 运行虚拟机时报此错误 原因&#xff08;环境变量问题&#xff0…

555 timer circuit

#1, Block & principle 1.1&#xff0c; The threshold and trigger levels normally are two- thirds and one-third, respectively, of VCC.(分压&#xff09; 1.2&#xff0c;These levels can be altered by use of the control-voltage terminal. When the trigger in…

生成式 AI:通信服务提供商云转型的下一阶段

【本文由Cloud Ace 整理发布。Cloud Ace 是谷歌云全球战略合作伙伴&#xff0c;拥有 300 多名工程师&#xff0c;也是谷歌最高级别合作伙伴&#xff0c;多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商&#xff0c;我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培…

spring boot引入swagger报错处理

目录 1. 报错说明 2. 查找原因 2.1 此前笔者的代码 3. 问题解决说明 4. 解决方案 4.1 在pom.xml引入springdoc包 4.2 创建配置文件&#xff08;可省略&#xff09; 4.3 在controller加入注解 4.4 查看接口文档 4.5 常用注解 1. 报错说明 在java项目中引入swagger 2.9.2…

Linux设置进程名称(标题) ( 7) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

技术管理三板斧之第一板斧拿结果-定目标

一、现状&#xff1a; 去年年底今年年初&#xff0c;帮助一家公司做了一次大的系统重构&#xff0c;30多小伙伴&#xff0c;经历一次洗礼&#xff0c;对产品定位&#xff0c;技术选型&#xff0c;目标制定&#xff0c;任务分配&#xff0c;协同开发&#xff0c;测试上线&#x…

JS 启动一个计时器来跟踪某一个操作的占用时长

文章目录 需求分析代码 需求 JS 中想要记录一个操作的占用时长 分析 可以启动一个计时器console.time(name:string)来跟踪某一个操作的占用时长。每一个计时器必须拥有唯一的名字&#xff0c;页面中最多能同时运行 10,000 个计时器。 当以此计时器名字为参数调用 console.timeE…

蓝桥杯专题-试题版-【龟兔赛跑预测】【回形取数】【阶乘计算】【矩形面积交】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…