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-1][j][k][l]+c(j,p[i]));
f[i][j][p[i]][l]=min(f[i][j][p[i]][l],f[i-1][j][k][l]+c(k,p[i]));
f[i][j][k][p[i]]=min(f[i][j][k][p[i]],f[i-1][j][k][l]+c(l,p[i]));
但以上的复杂度卡死你都过不去,所以优化状态;
因为对于i,肯定有一个人处于p[i];所以把p[i]舍弃
f[i+1][j][k]=min(f[i+1][j][k],f[i][j][k]+a[p[i]][p[i+1]]);
f[i+1][p[i]][k]=min(f[i+1][p[i]][k],f[i][j][k]+a[j][p[i+1]]);
f[i+1][j][p[i]]=min(f[i+1][j][p[i]],f[i][j][k]+a[k][p[i+1]]);
注意p[0]=3;
f[0][1][2]=0;
#include <bits/stdc++.h>
using namespace std;
int a[][];
int f[][][];
int p[];
int main()
{
int t;
cin>>t;
while(t--){
int l,n;
cin>>l>>n;
for(register int i=;i<=l;i++){
for(register int j=;j<=l;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=;i<=n;i++){
scanf("%d",&p[i]);
}
memset(f,0x3f,sizeof(f));
f[][][]=;
p[]=;
for(register int i=;i<n;i++){
for(register int j=;j<=l;j++){
for(register int k=;k<=l;k++){
if(j==p[i]) continue;
if(k==p[i]) continue;
if(j==k) continue;
if(j!=p[i+]&&k!=p[i+]) f[i+][j][k]=min(f[i+][j][k],f[i][j][k]+a[p[i]][p[i+]]);
if(p[i]!=p[i+]&&k!=p[i+]) f[i+][p[i]][k]=min(f[i+][p[i]][k],f[i][j][k]+a[j][p[i+]]);
if(j!=p[i+]&&p[i]!=p[i+]) f[i+][j][p[i]]=min(f[i+][j][p[i]],f[i][j][k]+a[k][p[i+]]);
}
}
}
int minn=INT_MAX;
for(int i=;i<=l;i++){
for(int j=;j<=l;j++){
minn=min(minn,f[n][i][j]);
}
}
cout<<minn<<endl;
}
}
SPOJ 703 SERVICE - Mobile Service 题解的更多相关文章
- SP703 SERVICE - Mobile Service
思路:DP 提交:1次 题解: 我们把处理到的要求作为阶段. \(f[i][x][y][z]\)表示第 \(i\) 个要求,三个人分别的位置. 发现这样有很多无用状态,因为显然在第 \(i\) 个要求 ...
- SP703 SERVICE - Mobile Service[DP]
题意翻译 Description 一个公司有三个移动服务员.如果某个地方有一个请求,某个员工必须赶到那个地方去(那个地方没有其他员工),某一时刻只有一个员工能移动.只有被请求后,他才能移动,不允许在同 ...
- Unable to create Azure Mobile Service: Error 500
I had to go into my existing azure sql database server and under the configuration tab select " ...
- 如何使用新浪微博账户进行应用登录验证(基于Windows Azure Mobile Service 集成登录验证)
使用三方账号登录应用应该对大家来说已经不是什么新鲜事儿了,但是今天为什么还要在这里跟大家聊这个话题呢,原因很简单 Windows Azure Mobiles Service Authenticatio ...
- vs2015-Azure Mobile Service
/App_Data /App_Start/ WebApiConfig.cs using System; using System.Collections.Generic; using System.C ...
- windows phone开发-windows azure mobile service使用入门
在使用azure之前,我一直只能做本地app,或者使用第三方提供的api,尽管大多数情况下够用,但是仍不能随心所欲操纵数据,这种感觉不是特别好.于是在azure发布后,我就尝试使用azure来做为个人 ...
- CH5102 Mobile Service【线性dp】
5102 Mobile Service 0x50「动态规划」例题 描述 一个公司有三个移动服务员,最初分别在位置1,2,3处.如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个 ...
- CH5102 Mobile Service
CH5102 Mobile Service 描述 一个公司有三个移动服务员,最初分别在位置1,2,3处.如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个地方去.某一时刻只有一 ...
- CH 5102 Mobile Service(线性DP)
CH 5102 Mobile Service \(solution:\) 这道题很容易想到DP,因为题目里已经说了要按顺序完成这些请求.所以我们可以线性DP,但是这一题的状态不是很好设,因为数据范围有 ...
随机推荐
- BZOJ 4668: 冷战 并查集启发式合并/LCT
挺好想的,最简单的方法是并查集启发式合并,加暴力跳父亲. 然而,这个代码量比较小,比较好写,所以我写了 LCT,更具挑战性. #include <cstdio> #include < ...
- Tarjan求强连通分量、求桥和割点模板
Tarjan 求强连通分量模板.参考博客 #include<stdio.h> #include<stack> #include<algorithm> using n ...
- MySQL的字符集操作命令总结
这篇文章主要介绍了MySQL的字符集操作命令总结,包括各种查看数据库.数据表等查询命令,需要的朋友可以参考下 以下均在mysql 5.5命令行中运行通过: 查看MySQL支持的字符集: 代码如下: ...
- 【Python】PIL模块
Python自建库,在爬虫等基础应用中更加简单好记,做整理以备自查. 目录 Image模块 open类.Save类.format类.Mode类.convert类.Size类.Info类.new类.Co ...
- Aragorn's Story
A - Aragorn's Story 直接套 线段树+树剖 板子 代码: // Created by CAD on 2019/8/12. #include <bits/stdc++.h> ...
- iOS检测QQ是否安装
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mqq://"]]) { ...
- 为什么要使用 Go 语言,Go 语言的优势在哪里?
1.Go有什么优势 可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了. 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的 ...
- web 多屏互动显示方案
1 基于 local storage 实现的信息传递 相关插件 lsbridge.js https://github.com/krasimir/l... 且项目中有非常简单易懂的示例你需要了解的一些关 ...
- Tomcat报错,内存溢出的错误Exception in thread "http-bio-8080-exec-13" java.lang.OutOfMemoryError: PermGen space
说是tomcat 内存溢出,然后按照网上看的搞一搞之后没出息这个问题了 原因是tomcat内存溢出,按照一到五步奏,在第三步加上那段参数.
- 使用JS生成HTML标签,以达到母板页的效果
前台页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1. ...