链接:

https://www.acwing.com/problem/content/276/

题意:

一个公司有三个移动服务员,最初分别在位置1,2,3处。

如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个地方去。

某一时刻只有一个员工能移动,且不允许在同样的位置出现两个员工。

从 p 到 q 移动一个员工,需要花费 c(p,q)。

这个函数不一定对称,但保证 c(p,p)=0。

给出N个请求,请求发生的位置分别为 p1~pN。

公司必须按顺序依次满足所有请求,目标是最小化公司花费,请你帮忙计算这个最小花费。

思路:

Dp[i,j,k] 表示处理第i个请求,三个人分别在j,k,p位置的最小花费.

第一个写转移写错了..是吧转移到目标点的人给拿出去,同时在上一个目标点的人加到转移方程,

开始没搞懂.

代码:

#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9; int C[210][210];
int Pos[1010];
int Dp[1010][210][210];
int n, l; int main()
{
scanf("%d%d", &l, &n);
for (int i = 1; i <= l; i++)
{
for (int j = 1; j <= l; j++)
scanf("%d", &C[i][j]);
}
for (int i = 1; i <= n; i++)
scanf("%d", &Pos[i]);
for (int i = 0; i <= n; i++)
{
for (int j = 1; j <= l; j++)
for (int k = 1; k <= l; k++)
Dp[i][j][k] = INF;
}
int p = 3;
Dp[0][1][2] = 0;
for (int i = 1; i <= n; i++)
{
for (int x1 = 1; x1 <= l; x1++)
{
for (int x2 = 1; x2 <= l; x2++)
{
if (x1 == x2 || x2 == p || x1 == p)
continue;
Dp[i][p][x2] = min(Dp[i][p][x2], Dp[i - 1][x1][x2] + C[x1][Pos[i]]);
Dp[i][x1][p] = min(Dp[i][x1][p], Dp[i - 1][x1][x2] + C[x2][Pos[i]]);
Dp[i][x1][x2] = min(Dp[i][x1][x2], Dp[i - 1][x1][x2] + C[p][Pos[i]]);
}
}
p = Pos[i];
}
int res = INF;
for (int x1 = 1; x1 <= l; x1++)
{
for (int x2 = 1; x2 <= l; x2++)
{
if (x1 == x2 || x2 == p || x1 == p)
continue;
res = min(res, Dp[n][x1][x2]);
}
}
printf("%d\n", res); return 0;
}
/*
5 2
0 1 1 1 1
1 0 2 3 2
1 1 0 4 1
2 1 5 0 1
4 2 3 4 0
4 2
*/

Acwing-274-移动服务(DP)的更多相关文章

  1. BZOJ 1820: [JSOI2010]Express Service 快递服务( dp )

    dp(i,j,k)表示在处理第i个业务, 另外2个在j,k处. 第一维可以滚动... --------------------------------------------------------- ...

  2. BZOJ1820:[JSOI2010]Express Service 快递服务(DP)

    Description 「飞奔」快递公司成立之后,已经分别与市内许多中小企业公司签订邮件收送服务契约.由于有些公司是在同一栋大楼内,所以「飞奔」公司收件的地点(收件点)最多只有m点 (1, 2, …, ...

  3. tyvj1061移动服务——DP

    题目:http://www.joyoi.cn/problem/tyvj-1061 DP记录状态为当前任务时不在此任务位置上的两个人的位置(因为一定有一个人在此任务位置上): 不妨设初始位置p[0]=3 ...

  4. Acwing P274 移动服务 题解

    每日一题 day21 打卡 Analysis DP的状态为已经完成的请求数量,通过指派一位服务员可以把”完成i - 1个请求的状态”转移到”完成i个请求的状态”那么我们可以知道转移从dp[i - 1] ...

  5. 算法竞赛进阶指南0x51 线性DP

    AcWing271. 杨老师的照相排列 思路 这是一个计数的题目,如果乱考虑,肯定会毫无头绪,所以我们从1号到最后一个依次进行安排. 经过反复实验,发现两个规律 每一行的同学必须是从左向右依次连续放置 ...

  6. DP百题练(一)

    目录 DP百题练(一) 线性 DP 简述 Arithmetic Progressions [ZJOI2006]物流运输 LG1095 守望者的逃离 LG1103 书本整理 CH5102 移动服务 LG ...

  7. wormhole提升hivereader读取速度方案

    背景: 最近dw用户反馈wormhole传输速度很慢,有些作业甚至需要3-4个小时才能完成,会影响每天线上报表的及时推送.我看了下,基本都是从Hive到其他数据目的地,也就是使用的是hivereade ...

  8. csp-s 考前刷题记录

    洛谷 P2615 神奇的幻方 洛谷 P2678 跳石头 洛谷 P1226 [模板]快速幂||取余运算 洛谷 P2661 信息传递 LOJ P10147 石子合并 LOJ P10148 能量项链 LOJ ...

  9. SCUT - 274 - CC B-Tree - 树形dp

    https://scut.online/p/274 首先要判断是一颗树,并且找出树的直径. 是一棵树,首先边恰好有n-1条,其次要连通,这两个条件已经充分了,当然判环可以加速. 两次dfs找出直径,一 ...

随机推荐

  1. CornerNet 算法笔记

    论文名称:CornerNet: Detecting Objects as Paired Keypoints 论文链接:https://arxiv.org/abs/1808.01244 代码链接:htt ...

  2. 3D玫瑰花

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  3. 【并行计算-CUDA开发】OpenCL、OpenGL和DirectX三者的区别

    什么是OpenCL? OpenCL全称Open Computing Language,是第一个面向异构系统通用目的并行编程的开放式.免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器 ...

  4. 【BZOJ4668】冷战(并查集)

    Description 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表"铁幕演说",正式拉开了冷战序幕.美国和苏联同为世界上的"超级大国" ...

  5. xshell设置

    登录脚本: #定义rz,sz自动下载路径 #保持窗口活动状态, 空闲时每120秒发送一个回车

  6. PTA(Basic Level)1037.在霍格沃茨找零钱

    如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.& ...

  7. .Net Core使用AutoMapper做对象关系映射

    我想很多后端开发者,纠结于如何在Dto及表实体中做属性关系映射,因为真的太繁琐了., ⒈如何使用? Mapper.Initialize(cfg => cfg.CreateMap<Users ...

  8. python基础之 线程_进程关系

    上图

  9. Django 模版语法与使用

    目录 Django 模版语法与使用 django模板语言介绍 (摘自官方文档) 链接 什么是模板? 模板语句的 注释 变量 {{ 变量 }} 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值 ...

  10. Robot Framework(三)项目实践出现的问题以及解决方法

    导航: 1.元素定位失败 2.系统自带的确认弹窗 3.ElementNotVisibleException: Message: element not visible 1.元素定位失败(使用frame ...