#动态规划#SP703 codevs 2182 1383 CH 5102 Mobile Service 移动服务

2024-02-11 06:08

本文主要是介绍#动态规划#SP703 codevs 2182 1383 CH 5102 Mobile Service 移动服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

有三个移动服务员,最初分别在位置1,2,3处。
如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个地方去。某一时刻只有一个员工能移动,且不允许在同样的位置出现两个员工。从 p p p q q q移动一个员工,需要花费 c ( p , q ) c(p,q) c(p,q)。求最小花费。


分析

用动态规划,但是普通的动态规划不仅时间超时,空间也无法满足,所以需要优化,可以发现员工应该在的位置其实是冗余,所以说可以优化为

f[x][i][j]=f[x][j][i]=min(f[x][i][j],f[x^1][i][j]+c[ls][y]);//从上一个点赶到这一个点f[x][ls][j]=f[x][j][ls]=min(f[x][j][ls],f[x^1][i][j]+c[i][y]);//从i点赶到这一个点f[x][i][ls]=f[x][ls][i]=min(f[x][i][ls],f[x^1][i][j]+c[j][y]);//从j点赶到这一个点

时间复杂度 O ( m n 2 ) O(mn^2) O(mn2)


代码

#include <cstdio>
#include <cstring>
int n,m,ls,y,f[2][201][201],c[201][201];
int in(){int ans=0; char c=getchar();while (c<48||c>57) c=getchar();while (c>47&&c<58) ans=ans*10+c-48,c=getchar();return ans;
}
int min(int a,int b){return (a<b)?a:b;}
int main(){n=in(); m=in(); memset(f[0],127/3,sizeof(f[0]));for (int i=1;i<=n;i++)for (int j=1;j<=n;j++) c[i][j]=in();ls=in(); int ans=f[0][0][0],x=0;f[0][1][2]=f[0][2][1]=c[3][ls]; //初始化f[0][1][3]=f[0][3][1]=c[2][ls];f[0][2][3]=f[0][3][2]=c[1][ls];while (--m){x^=1; memset(f[x],127/3,sizeof(f[x])); y=in();for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)if (i!=j&&i!=ls&&j!=ls)//动态规划(滚动数组)f[x][i][j]=f[x][j][i]=min(f[x][i][j],f[x^1][i][j]+c[ls][y]),f[x][ls][j]=f[x][j][ls]=min(f[x][j][ls],f[x^1][i][j]+c[i][y]),f[x][i][ls]=f[x][ls][i]=min(f[x][i][ls],f[x^1][i][j]+c[j][y]);ls=y;}for (int i=1;i<=n;i++)for (int j=1;j<=n;j++) ans=min(ans,f[x][i][j]);return !printf("%d",ans);
}

这篇关于#动态规划#SP703 codevs 2182 1383 CH 5102 Mobile Service 移动服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699018

相关文章

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题