CH 5102Mobile Service题解

题目;

用动态规划很容易将完成任务量作为dp的阶段,通过指派服务员,从当前i-1个任务转移到i个任务;

我们可以用一个四维数组f[i][x][y][z]来表示在完成当前任务i时,三个机器人分别在x,y,z的位置;每次由其中一个机器人向目标位置转移;取min值;

但是算法规模一点都不乐观;

我们想到在完成当前任务i时,必定存在一个机器人位于p[i],即目标地;那么我们可以用f[i][x][y],即完成任务i时,另外两个机器人位于x,y的位置;

状态转移:

f[k][i][j]=min(f[k][i][j],f[k-1][i][j]+c[p[k-1]][p[k]]);//k为当前完成任务,c数组记录两者间的距离,p数组为目标到达地;
f[k][p[k-1]][j]=min(f[k][p[k-1]][j],f[k-1][i][j]+c[i][p[k]]);
f[k][i][p[k-1]]=min(f[k][i][p[k-1]],f[k-1][i][j]+c[j][p[k]]);

不妨设p0=3,那么初始值f[0][1][2]=0;目标为f[N][?][?];

题后反思:

求解线性dp要注意阶段的选择,注意附加信息要处理;

确定状态时要注意选择最小的能表示整个状态的维度空间;

阶段保证无后效性;

#include<bits/stdc++.h>
#define maxl 201
#define maxn 1001
using namespace std;
int f[1001][201][201],n,m,t,l,c[201][201],p[1001],ans;
template<typename T>inline void read(T &x)
{x=0;T f=1,ch=getchar();while(!isdigit(ch)) ch=getchar();if(ch=='-') f=-1, ch=getchar();while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48), ch=getchar();x*=f;
}
int main()
{read(t);while(t--) {int ans=2139062143;read(l);read(n);for(int i=1;i<=l;i++)for(int j=1;j<=l;j++)read(c[i][j]);memset(f,0x7f,sizeof(f));for(int i=1;i<=n;i++) {read(p[i]);}f[0][1][2]=c[3][p[1]];f[0][2][3]=c[1][p[1]];f[0][1][3]=c[2][p[1]];p[0]=3,f[0][1][2]=0;for(int k=1;k<=n;k++)for(int i=1;i<=l;i++)for(int j=1;j<=l;j++)if(i!=j&&p[k-1]!=j&&p[k-1]!=i){f[k][i][j]=min(f[k][i][j],f[k-1][i][j]+c[p[k-1]][p[k]]);f[k][p[k-1]][j]=min(f[k][p[k-1]][j],f[k-1][i][j]+c[i][p[k]]);f[k][i][p[k-1]]=min(f[k][i][p[k-1]],f[k-1][i][j]+c[j][p[k]]);}for(int i=1;i<=l;i++)for(int j=1;j<=l;j++) {if(i!=j&&i!=p[n]&&j!=p[n])ans=min(ans,f[n][i][j]);}printf("%d\n",ans);}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/Tyouchie/p/10668379.html

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

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

相关文章

Postgres主进程文件—postmaster.pid

postmaster内容 使用cat -n 命令可以查看postmaster.pid文件内容&#xff1a; ) 根据每一行进行解释&#xff0c;并给出对应的源代码说明 13795: 代表Postgres主进程的PID/usr/local/pgsql/data: 代表数据目录 1529235109&#xff1a; 代表postmaster文件的创建时间。 54…

百度这个疯子

今天在搜索软件的时候&#xff0c;因为天朝无耻的屏蔽打压Google&#xff0c;所以万不得已在Bing和BaiDu之间徘徊&#xff0c;居然看到百度弄出来一个软件搜索&#xff0c;能够按照名称搜索手机软件和电脑软件&#xff0c;有点那么意思&#xff0c;我不知道他是如何绕开盗版这个…

Mysql 中 delete 与 left join 的问题

今天在一个程序后台删除一个东西的时候&#xff0c;却出现了这个问题&#xff1a; 在Google搜索了大约1小时候&#xff0c;终于找到了原因&#xff0c;解决起来非常简单&#xff1a; 增加一个T.*就搞定了。 故障分析&#xff1a;因为Insert、Update、Delete三个参数&#xff0c…

Razor Generator

https://marketplace.visualstudio.com/items?itemNameDavidEbbo.RazorGenerator 转载于:https://www.cnblogs.com/macT/p/10670205.html

2020年简单总结

致敬自己&#xff0c;勇敢向前&#xff0c;不畏艰苦&#xff0c;好好工作&#xff0c;好好生活&#xff0c;好好对待家人 2020年即将成为过去&#xff0c;2021年终将到来&#xff0c;在这剩余不到最后10小时的时间里&#xff0c;总结下2020年的得与失。 2020年的一场疫情打破…

Oracle常用的几个父栓

Oracle中的父闩大致可以分成2类&#xff1a;有子闩的父闩或者独居的父闩&#xff0c;我们来看看这些父闩的属性: SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release…

web架构设计经验分享

2019独角兽企业重金招聘Python工程师标准>>> 本人作为一位web工程师&#xff0c;着眼最多之处莫过于 性能与架构&#xff0c;本次幸得参与sd2.0大会&#xff0c;得以与同行广泛交流,于此二方面&#xff0c;有些心得&#xff0c;不敢独享&#xff0c;与众博友分享&am…

保护可执行程序的一种方法

rar zip压缩有密码打开 运行 转载于:https://www.cnblogs.com/hshy/p/10670277.html

彻底理清重载函数匹配

前言 前面我们讲到了《什么是函数重载&#xff1f;》&#xff0c;有了函数重载之后&#xff0c;就需要确定某次调用需要选用哪个函数。这个过程可以称之为函数匹配或者重载确定。大多数情况下&#xff0c;我们都很容易能够确定某次调用需要选用哪个函数&#xff0c;但事实上不…

GPRS底层API(转)

【API函数】&#xff1a;a)ConnMgrApiReadyEvent&#xff08;&#xff09;函数函数原型&#xff1a;HANDLE WINAPI ConnMgrApiReadyEvent();利用此函数来我们可以返回一个连接事件的句柄&#xff0c;注意在的得到句柄后要记得及时释放b)ConnMgrConnectionStatus&#xff08;&am…

js和jquery书籍

开始学习js了&#xff0c;找了基本书&#xff0c;留着看。 http://www.cnblogs.com/xiao_luobo/archive/2010/12/03/1895270.html http://blog.csdn.net/rodjohnsondoctor/article/details/7610688 基础类《高效能人士的7个习惯》&#xff08;推荐给所有刚刚进入职场的新人&…

面向对象与软件工程—团队作业1

一、队伍介绍 队伍名称&#xff1a;逍遥此身君子意 队伍编号&#xff1a;1523933 参赛区域&#xff1a;西北赛区 参赛类别&#xff1a;小程序 指导老师&#xff1a;崔亚超 二、队伍成员信息 姓名&#xff1a;凌龙&#xff08;队长&#xff09; 学号&#xff1a;1700802085 班级…

PostgreSQL的核心架构

PostgreSQL的核心架构 注意 本人的博客都迁移到本人自己搭建的博客地址&#xff0c;通过此处可查看。 应用程序的访问接口 1. 访问接口总体图 进程及内存结构 1. 进程和内存结构图 主进程&#xff1a;Postmaster进程 辅助进程&#xff1a;SysLogger&#xff08;系统日志&a…

BUG: Setup Was Unable to Create a DCOM User Account Error Message in Visual Studio 6.0

今天在安装VS 6.0时&#xff0c;遇见这个问题&#xff1a;Setup was unable to create a DCOM user account in order to register <path>&#xff3c;valec.exe后来找到原来是VS的一个Bug。贴出微软的原文&#xff1a;BUG: "Setup Was Unable to Create a DCOM Use…

研究下

渗透测试: http://www.cnblogs.com/hyddd/archive/2009/03/22/1419104.html ldap: http://waringid.blog.51cto.com/65148/79648/

线程属性 pthread_attr_t

参考资料&#xff1a; https://blog.csdn.net/hudashi/article/details/7709413 Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。在pthread_create中&#xff0c;把第二个参数设置为NULL的话&#xff0c;将采用默认的属性配置…

如何让new操作符只构造,不申请内存

问题 c中的new操作符 通常完成两个工作 分配内存及调用相应的构造函数。 请问&#xff1a; 如何让new操作符不分配内存&#xff0c;只调用构造函数&#xff1f; 这样的用法有什么用&#xff1f; placement new的含义 placement new可以实现不分配内存&#xff0c;只调用…

Linux 下的多线程下载工具

2019独角兽企业重金招聘Python工程师标准>>> 最先用的是 Axel&#xff08;http://axel.alioth.debian.org/&#xff09;&#xff0c;功能还可以&#xff0c;不过下载文件最多支持到 2GB&#xff0c;再大的文件就不能下载了&#xff0c;真变态&#xff01; aget&…

Launcher结构之home screen

今天刚刚知道如果你的Eclipse里面的工程指向服务器里面的源码记住千万不能在Eclipse里编译~~会在服务器上的源码里多处很多的中间件这样make不了只能清除那些中间件才能编译比较麻烦 Home screen可以说是一个手机的最重要应用&#xff0c;就像一个门户网站的首页&#xff0c;直…

Python_迭代器和生成器的复习_38

迭代器和生成器 迭代器&#xff1a; 双下方法&#xff1a;很少直接调用的方法&#xff0c;一般情况下&#xff0c;是通过其他方法触发的 可迭代的协议——可迭代协议 含有__iter__ 的方法 (__iter__ in dir(数据)) 可迭代的一定可以被for循环 迭代器协议&#xff1a;含有 __ite…