题目

用动态规划很容易将完成任务量作为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[][][],n,m,t,l,c[][],p[],ans;
template<typename T>inline void read(T &x)
{
x=;T f=,ch=getchar();
while(!isdigit(ch)) ch=getchar();
if(ch=='-') f=-, ch=getchar();
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^), ch=getchar();
x*=f;
}
int main()
{
read(t);
while(t--) {
int ans=;
read(l);read(n);
for(int i=;i<=l;i++)
for(int j=;j<=l;j++)
read(c[i][j]);
memset(f,0x7f,sizeof(f));
for(int i=;i<=n;i++) {
read(p[i]);
}
f[][][]=c[][p[]];
f[][][]=c[][p[]];
f[][][]=c[][p[]];
p[]=,f[][][]=;
for(int k=;k<=n;k++)
for(int i=;i<=l;i++)
for(int j=;j<=l;j++)
if(i!=j&&p[k-]!=j&&p[k-]!=i)
{
f[k][i][j]=min(f[k][i][j],f[k-][i][j]+c[p[k-]][p[k]]);
f[k][p[k-]][j]=min(f[k][p[k-]][j],f[k-][i][j]+c[i][p[k]]);
f[k][i][p[k-]]=min(f[k][i][p[k-]],f[k-][i][j]+c[j][p[k]]);
}
for(int i=;i<=l;i++)
for(int j=;j<=l;j++) {
if(i!=j&&i!=p[n]&&j!=p[n])
ans=min(ans,f[n][i][j]);
}
printf("%d\n",ans);
}
return ;
}

CH 5102Mobile Service题解的更多相关文章

  1. SPOJ 703 SERVICE - Mobile Service 题解

    题面 好题啊!~ 设f[i][j][k][l]表示已经处理完前i个请求后,a在j,b在k,c在l的最小值是多少: 那么f[i][p[i]][k][l]=min(f[i][p[i]][k][l],f[i ...

  2. 基于注释的Spring Security实战

    一.准备工作 预准备的工具及软件有: 1. Eclipse IDE:我使用Eclipse JEE 3.7版,即eclipse-jee-indigo-SR2-win32-x86_64.zip 2. JD ...

  3. linux系统编程:自己动手写一个who命令

    who命令的作用用于显示当前有哪些用户登录到系统. 这个命令执行的原理是读取了系统上utmp文件中记录的所有登录信息,直接显示出来的 utmp文件在哪里呢? man who的时候,在手册下面有这么一段 ...

  4. duboo 配置文件

    官方文档 http://dubbo.apache.org/en-us/docs/user/quick-start.html 自己的 <?xml version="1.0" e ...

  5. Eureka 整理

    服务治理:(该模块也可以使用集群) 该模块主要负责完成微服务架构中的服务治理功能. 1.构建服务注册中心. 每个服务单元需要向注册中心登记自己提供的服务. 2.服务注册与服务发现. 服务之间的调用不再 ...

  6. 【LeetCode 】验证回文串

    [问题]给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写.说明:本题中,我们将空字符串定义为有效的回文串. 示例 : 输入: "A man, a plan, a ...

  7. java基础学习总结——GUI编程(一) 还未仔细阅读

    一.AWT介绍

  8. CH 5102 Mobile Service(线性DP)

    CH 5102 Mobile Service \(solution:\) 这道题很容易想到DP,因为题目里已经说了要按顺序完成这些请求.所以我们可以线性DP,但是这一题的状态不是很好设,因为数据范围有 ...

  9. CH 6201 走廊泼水节题解

    题目链接:CH6201 当时在海亮考试的第一题: 心得:其实一个算法是要真正理解这个思路和过程,而并不是单单知道它是用来写什么题的: 思路:n个节点有n-1条边,把这n-1条边按照权值从小到大排序,有 ...

随机推荐

  1. VUE-010-通过声明式导航 router-link 传递 params 参数(路由 name 识别,请求链接不显示参数传递)

    在前端页面表单列表修改时,经常需要在页面切换的时候,传递需要修改的表单内容,除了通过路由进行表单参数的传递,也可通过声明式导航 router-link 进行页面跳转和参数传递. 首先,配置页面跳转路由 ...

  2. Linux基础命令1

    文件的操作: Tab键:自动补齐 反斜杠‘\’:强制换行 Ctrl+u:清空至行首 Ctrl+k:清空至行尾 Ctrl+l:清屏   --clear 清屏 Ctrl+c:取消本次命令编辑,中断当前操作 ...

  3. 学习Makefile

    1> 编译一个文件2> 编译多个文件3> 编译多个目录下的文件4> inclue makefile5> 使用规则1>target:depend[tab]cmddep ...

  4. 批量将PowerDesigner中表字段由小写变成大写

    通过以下VB脚本即可批量修改,在Tools=>Execute Commands下的Edit/Run Scripts,或者通过Ctrl+Shift+X运行以下脚本即可: '************ ...

  5. [LintCode] 77. Longest common subsequences_ Medium tag: Dynamic Programming

    Given two strings, find the longest common subsequence (LCS). Example Example 1: Input: "ABCD&q ...

  6. 20175211 2018-2019-2 《Java程序设计》第五周学习总结

    目录 教材学习内容总结 第六章 接口与实现 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 学习进度条 参考资料 教材学习内容总结 第六章 接口与实现 6.1 接口 ...

  7. python项目推荐(转载知乎)

    作者:Wayne Shi链接:https://www.zhihu.com/question/29372574/answer/88744491来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  8. Cocos Creator LabelAtlas(艺术数字的使用)

    # 艺术数字资源 (LabelAtlas) **艺术数字资源** 是一种用户自定义的资源,它可以用来配置艺术数字字体的属性. ## 创建艺术数字资源 在 **资源管理器** 中右键,可以在如下菜单中找 ...

  9. Cocos Creator 橡皮差(刮刮卡)功能(转)

    实现一个刮刮卡的效果,于是在论坛里搜集了一些资料并且看了一下CCMask的源码,做出来一套可用的教程,分享给大家.(WEBGL和Native端测试可用) maskNode是详细设置如下 我们在 scr ...

  10. linux 笔记 第一天

    打开终端:ctrl+alt+t 清屏:ctrl+l 在终端在退出锁定:ctrl+c 目录:又称为文件夹,是包含所有的文件 目录创建规则: 1.大小是256 2.不能包含特殊字符 3.见名知义 路径:是 ...