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. 【Codeforces Round #432 (Div. 2) B】Arpa and an exam about geometry

    [链接]h在这里写链接 [题意] 给你3个点A,B,C 问你能不能将纸绕着坐标轴上的一点旋转.使得A与B重合,B与C重合 [题解] 这3个点必须共圆. 则A,B,C不能为一条直线.否则无解. 共圆之后 ...

  2. oracle里long类型的总结

    转自原文oracle中long类型为什么不推荐使用 不是不推荐使用的,是一般用不到,而有些时候是会用到的,所以不能一概而论.1.LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB.2.对于 ...

  3. Android利用FTP实现与PC的上传和下载,实现二维码扫描下载

    之前给老板所带的本科生课程实验所写的代码,拿出来分享一下. 下载地址:  https://github.com/smartshuai/ConnectHelper.git

  4. synchronized和ReentrantLock区别

    一.什么是sychronized sychronized是java中最基本同步互斥的手段,可以修饰代码块,方法,类. 在修饰代码块的时候需要一个reference对象作为锁的对象. 在修饰方法的时候默 ...

  5. Javascript和jquery事件--鼠标右键事件,contextmenu

    右键点击触发是浏览器的默认菜单事件contextmenu,你可以选择阻止它,使用event.preventDefault();或者return false;. 想要定义右键点击事件,关注的是mouse ...

  6. 在 Windows 10 x64 上安装及使用 ab 工具的流程

    本文转自:www.shuijingwanwq.com/2017/04/18/1568/ 1.基于AB测试工具进行高并发情形下的模拟测试,打开:http://httpd.apache.org/docs/ ...

  7. 【UVA】434-Matty&#39;s Blocks

    一道非常easy想复杂的题,给出主视图和右视图,计算最少能用几个正方体组成相应的视图,以及最多还能加几块正方体. 求最多加入事实上就是求出最多的正方体数减去最少的,主要就是最少的不好求. 一開始各种模 ...

  8. TCP的可靠传输机制(简单好理解:分段与流,滑窗,连接,流量控制,重新发送,堵塞控制)

    TCP的几大模块:分段与流,滑窗,连接,流量控制,重新发送,堵塞控制. 1.checksum:在发送TCP报文的时候,里面的信息可能会因为环境的问题,发送变化,这时,接收信号的时候就需要通过check ...

  9. Shiro的Filter机制详解---源码分析(转)

    Shiro的Filter机制详解 首先从spring-shiro.xml的filter配置说起,先回答两个问题: 1, 为什么相同url规则,后面定义的会覆盖前面定义的(执行的时候只执行最后一个). ...

  10. mybatis+springmvc缓存设置

    开始接触mybatis,本以为缓存设置好麻烦,在网上找了好多相关的资料,说得也都好复杂,经过自己亲自实践,其实很简单的. 首先引入需要的jar包,参照pom.xml配置: <!-- 缓存设置 s ...