Time Limit: 3 second

Memory Limit: 256 MB

【问题描述】

一个公司有三个移动服务员。如果某个地方有一个请求,某个员工必须赶到那个地方去(那个地方没有其他员工),某一时刻只有一个员工能移动。被请求后,他才能移动,不允许在同样的位置出现两个员工。从P到Q移动一个员工,需要花费C(P,Q)。这个函数没有必要对称,但是C(P,P)=0。公司必须满足所有的请求。目标是最小化公司花费。

【输入格式】

第一行有两个整数L,N(3≤L≤200,1≤N≤1000)。L是位置数,N是请求数。每个位置从1到L编号。下L行每行包含L个非负整数。第i+1行的第j个数表示c(I,J ),并且它小于2000。最后一行包含N个数,是请求列表。一开始三个服务员分别在位置1,2,3.

【输出格式】

一个数M,表示最小服务花费

【输入样例1】

5 9
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 4 1 5 4 3 2 1

【输出样例1】

5

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t029

【题意】

【题解】



由于是按顺序处理请求的.

所以每当完成一个请求i过后.

三个人中必然有一个人是在Ask[i]所在的位置的;

这样就能给DP降维了;

假设f[i][j][k]表示前i个询问,第i个询问过后,有一个人是在Ask[i]处,另外两个人是在j,k处(这里时刻保证j< k)的最小花费;

则有三种转移到i+1的方式

1.从j->Q[i+1];

2.从k->Q[i+1];

3.从Q[i]->Q[i+1];

看看到了i+1后新的状态另外两个人在哪里就好;

代码挺简单的。

平台给的内存限制比较大。所以直接开F[N][L][L]没问题;

如果内存小的话就要用滚动数组了.



【完整代码】

#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define ref(x) scanf("%lf",&x) typedef pair<int, int> pii;
typedef pair<LL, LL> pll; const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 };
const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 };
const double pi = acos(-1.0);
const int L = 210, N = 1e3 + 20;
const int INF = 0x3f3f3f3f; int w[L][L],l,n,Q[N];
int ans = 20e8;
int f[N][L][L]; void in()
{
rei(l), rei(n);
rep1(i, 1, l)
rep1(j, 1, l)
rei(w[i][j]);
rep1(i, 1, n)
rei(Q[i]);
} void ga()
{
if (Q[1]!=1 && Q[1]!=2)
f[1][1][2] = w[3][Q[1]];
if (Q[1] != 1 && Q[1] != 3)
f[1][1][3] = w[2][Q[1]];
if (Q[1] != 2 && Q[1] != 3)
f[1][2][3] = w[1][Q[1]];
rep1(i,1,n-1)
rep1(j,1,l-1)
rep1(k, j + 1, l)
if (f[i][j][k]<INF)
{
//j->Q[i+1]
if (k != Q[i + 1] && Q[i] != Q[i + 1])
{
int one = k, two = Q[i];
if (one > two) swap(one, two);
f[i + 1][one][two] = min(f[i + 1][one][two], f[i][j][k] + w[j][Q[i + 1]]);
}
//k->Q[i+1];
if (j != Q[i + 1] && Q[i] != Q[i + 1])
{
int one = j, two = Q[i];
if (one > two) swap(one, two);
f[i + 1][one][two] = min(f[i + 1][one][two], f[i][j][k] + w[k][Q[i + 1]]);
}
//Q[i]->Q[i+1]
if (j != Q[i + 1] && k != Q[i + 1])
{
f[i + 1][j][k] = min(f[i + 1][j][k], f[i][j][k] + w[Q[i]][Q[i + 1]]);
}
}
rep1(i, 1, l - 1)
rep1(j, i + 1, l)
ans = min(ans, f[n][i][j]);
} void o()
{
printf("%d\n", ans);
} int main()
{
//printf("%d\n", sizeof(f) / 1024 / 1024);
//freopen("F:\\rush.txt", "r", stdin);
memset(f, INF, sizeof f);
in();
ga();
o();
//printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}

【t029】Mobile Service的更多相关文章

  1. 【转载】Web Service和WCF的到底有什么区别

    [1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XM ...

  2. 【poj1195】Mobile phones(二维树状数组)

    题目链接:http://poj.org/problem?id=1195 [题意] 给出一个全0的矩阵,然后一些操作 0 S:初始化矩阵,维数是S*S,值全为0,这个操作只有最开始出现一次 1 X Y ...

  3. 【转】Web Service单元测试工具实例介绍之SoapUI

    转自:http://blog.csdn.net/oracle_microsoft/article/details/5689585 SoapUI 是当前比较简单实用的开源Web Service 测试工具 ...

  4. 【原创】 SharePoint Service Unavaliable

    HTTP Error 503. The service is unavailable. 一般都是application pool停止工作了,停止原因可能是Identiy里的账号过期了什么的.

  5. 【Android】Kill Service

    花了一天时间对如何Android保证Service不被杀死研究了一下,我的手机是Nexus5,系统4.4.2. 杀死一个Service通常有以下几种可能: 1)APP自己杀死(包括调用stopServ ...

  6. 【转】Android Service被关闭后自动重启,解决被异常kill 服务

    http://www.kaifajie.cn/android/10182-2.html 每次调用startService(Intent)的时候,都会调用该Service对象的onStartComman ...

  7. 【转】Android Service完全解析,关于服务你所需知道的一切(下) ---- 不错

    原文网址:http://blog.csdn.net/guolin_blog/article/details/9797169 转载请注册出处:http://blog.csdn.net/guolin_bl ...

  8. 【转】android service 之二(IntentService)

    原文网址:http://rainbow702.iteye.com/blog/1143286 不管是何种Service,它默认都是在应用程序的主线程(亦即UI线程)中运行的.所以,如果你的Service ...

  9. 【转】Android Service创建USB HOST通信

    之前做了一个关于Android USB通信的Case,通过Android的USB总线给Zigbee供电,和板载的Zigbee(基于Zigbee的自组网)进行通信.要使用Android的USB Host ...

随机推荐

  1. JPA 对象关系映射总结(一)---persistence.xml 文件配置要点

    1. <property name="hibernate.hbm2ddl.auto" value="update"/>,这里表示的 功能是: 自动创 ...

  2. macOS 上配置 Lua

    [最新版]从零开始在 macOS 上配置 Lua 开发环境   脚本语言,你可能更需要的是 Lua 不同的脚本语言有不同的特性,第一接触的脚本语言,可能会影响自己对整个脚本语言的理解和认知.我以前接触 ...

  3. SQl 事务增加数据

    连SQl简单地事务处理多表的情况 begin transaction declare @error int declare @QID int set @error = 0 insert into HW ...

  4. javascript预解释中的机制

    预解释是一种毫无节操的机制(自从学了预解释,从此节操是路人) in:‘num’ in window 判断num是否为window这个对象的一个属性,是的话返回true,不是返回false 1.预解释的 ...

  5. 学习笔记:TypeScript入门——基础类型

    前言: TypeScript官网断断续续看过几遍,不知道项目中如何使用,有机会还是要实践一下.现在再把文档上不懂的知识点理一遍. 基础类型 1.什么是元组Tuple? 元组类型允许表示一个已知元素数量 ...

  6. POJ 3264 Balanced Lineup 线段树RMQ

    http://poj.org/problem?id=3264 题目大意: 给定N个数,还有Q个询问,求每个询问中给定的区间[a,b]中最大值和最小值之差. 思路: 依旧是线段树水题~ #include ...

  7. python3 格式化输出给定时间的下一秒

    # 功能:输入一个时间,格式化输出该时间的下一秒 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan # 功能:输入一个 ...

  8. jmeter--元件的作用域与执行顺序

    1.元件的作用域 JMeter中共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(conf ...

  9. 6.1、Android硬件访问服务之框架

    1.通过前面led点亮的例子,其流程如下 Android app(java)(通过loadLibrary)——>C library(C库做如下事情)——>1.JNI_Onload 2.jn ...

  10. Shiro的Web项目配置(转)

    Shiro的Web项目配置 一 shiro的学习 二 shiro的java客户端配置 三 关于权限的一些问题 一 shiro的学习 官网和张开涛博客 二 shiro的java客户端配置 1.在web. ...