Mr. Rito Post Office
あなたは離島の郵便局に勤めるプログラマである.あなたの住んでいる地域は,複数の島々からなる.各島には一つ以上の港町がある.それらに加えて他の町や村があるかもしない.ある島から別の島に向かうためには船を使わなければならない.一つの島の中を回るには陸路が使えるが,海路を利用した方が速いこともある.
近年行われた郵便局の民営化をきっかけに,経費削減に向けて郵便配達員の人員整理が全国的に行われた.離島の郵便局もその例外ではなく,結果として郵便配達員は利藤さんただ一人となってしまった.その郵便局が集配を担当する地域は非常に広いため,一人で集配するのは大変な作業である.なので,どのようにすれば効率的に集配を行えるのか,利藤さんがあなたに助けを求めてきた.
あなたの仕事は,利藤さんがたどるべき町や村の集配順序が与えられたときに,最短巡回経路を求めるプログラムを書くことである.
利藤さんは,決して指定された順序以外で集配業務を行うことができない.しかし,ある町や村から別の町や村へ移動する際に,他の町や村を経由して移動することは許可されている.また,利藤さんは島々を巡るための一隻の船を持っている.
例えば,町A,町B,村Cという集配順序が与えられた場合,町Aから町Bへ向かう際にどの町や村を経由してもかまわない.このとき,村Cを経由しても構わないが,集配順序を守るためには,一度町Bに行って集配をおこなってから,改めて村Cを訪れて集配をおこなわなければならない.また,町Aから海路を用いて町Bに向かい,町Bから陸路を用いて村Cに向かった場合,船を町Bに置いたままになる.したがって,次に海路を使いたい場合は町Bに戻る必要がある.
一つの町や村において複数回集配をしなければならない場合もある.たとえば,町A,村B,町C,村Bという集配順序が与えられるかもしれない.このとき,町Aから村Bをたどらずに町Cに向かった場合は,町Cでいきなり集配をおこなうことはできない.最初の村Bでの集配が終わっていないからである.町Cで集配を済ませた後で村Bを訪れて集配しても,一回目の村Bの集配を終わらせたことにはならない.
利藤さんは,はじめに必ずある港町に船とともにいる.利藤さんはベテランであるため,移動時間以外の集配作業にかかる時間は無視してよい.また,最後の町または村での集配業務が完了するまでの時間だけが問題であり,船をもとの位置に戻して郵便局に帰るまでの時間は考慮しなくてよい.
Input
入力は複数のデータセットから構成される.各データセットの形式は次に示すとおりである.
N M
x1 y1 t1 sl1
x2 y2 t2 sl2
...
xM yM tM slM
R
z1 z2 ... zR
データセットの中の入力項目は,すべて非負の整数である.行中の入力項目の区切りは空白 1 個である.
最初の行は,陸路及び海路網の大きさを規定する.
N (2 ≤ N ≤ 200) は,町または村の数である. それぞれの町または村には,1 から N までの固有の番号を割り当てる. M (1 ≤ M ≤ 10000) は,陸路と海路の合計本数である.
2 行目から 1 + M 行目は,陸路または海路の記述である. xi と yi (1 ≤ xi, yi ≤ N) は両端の町または村の番号を表す. ti (1 ≤ ti ≤ 1000) はその陸路または海路の移動時間を表す. sli は ‘L’ または ‘S’ のいずれかであり,Lは陸路を,Sは海路をそれぞれ表す.
ある2つの町や村を直接結ぶ陸路または海路が2本以上存在することがある. それぞれの陸路または海路は双方向であり,すなわちどちらの向きにも移動できる.
M + 2 行目の R (1 ≤ R ≤ 1000)は,利藤さんが担当する集配先の数を表す. M + 3 行目には,集配先の町や村の番号 zi (1 ≤ zi ≤ N) が集配順に R 個並んでいる.
初期状態では利藤さんと船はともに港町 z1 に存在する. 初期状態から集配先の町や村へは,必ず何らかの方法で移動することができる.
入力の終わりは,空白で区切られた2つの0を含む1行で示される.
Output
入力の各データセットに対して,与えられた集配順序で利藤さんが町と村を巡回するために必要な最短移動時間を求め,1行に出力せよ.
Sample Input
3 3
1 2 5 L
1 2 7 S
2 3 11 S
3
1 2 3
5 5
1 2 15 L
2 3 10 L
4 5 7 L
1 3 30 S
3 4 100 S
5
1 3 5 4 1
0 0
Output for the Sample Input
18
269 题解:
首先,我们发现每次询问都只会有最多跟换两次道路,因为如果要更换多次,那么我们必须原路返回,或者走环绕回去,这样的话在一次询问中一定是没有只换两次或者优秀的。
那么这个题目就变得可以dp了,那么状态也变得十分显然了,因为要一个n^3的算法,那么肯定状态是两维的,考虑记那两个量呢?然而题目一个才两个限制量——第几个询问和船在哪里,那么就可以设dp[i][j]表示处理完前i个询问,然后船丢到j节点的方案数。
那么转移就根据那个性质,枚举两个断点就可以了,注意要特判两个断点相等的情况就可以了。 代码:(wa了,但思路没有问题,pai了2000多组极限数据没有wa)。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#define MAXN 220
#define ll long long
using namespace std;
int n,m,r;
ll mp[][][],dis[][][],dp[][],inf;
int id[]; void pre(){
memset(dis,/,sizeof(dis));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) dis[i][j][]=mp[i][j][],dis[i][j][]=mp[i][j][];
for(int i=;i<=n;i++) dis[i][i][]=dis[i][i][]=;
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
if(i==j||j==k||k==i) continue;
dis[i][j][]=min(dis[i][j][],dis[i][k][]+dis[k][j][]);
dis[i][j][]=min(dis[i][j][],dis[i][k][]+dis[k][j][]);
}
} void DP(){
memset(dp,/,sizeof(dp));inf=dp[][];
dp[][]=;
for(int i=;i<=r;i++){
for(int k=;k<=n;k++){
int x=id[i-],y=id[i];
dp[i][k]=min(dp[i][k],dp[i-][k]+dis[x][y][]);
for(int j=;j<=n;j++){
if(dp[i-][j]==inf) continue;
if(x==y) dp[i][k]=dp[i-][k];
else dp[i][k]=min(dp[i][k],dp[i-][j]+dis[x][j][]+dis[j][k][]+dis[k][y][]);
}
}
}
} int main()
{
while(){
memset(mp,/,sizeof(mp));
scanf("%d%d",&n,&m);
if(!n&&!m) break;
for(int i=;i<=m;i++){
int x,y,z;char c;
scanf("%d%d%d%c%c",&x,&y,&z,&c,&c);
if(c=='L') mp[x][y][]=min(mp[x][y][],(ll)z),mp[y][x][]=min(mp[y][x][],(ll)z);
else mp[x][y][]=min(mp[x][y][],(ll)z),mp[y][x][]=min(mp[y][x][],(ll)z);
}
pre();
scanf("%d",&r);
memset(id,,sizeof(id));
id[]=;
for(int i=;i<=r;i++) scanf("%d",&id[i]);
DP();
ll ans=inf;
for(int i=;i<=n;i++) ans=min(ans,dp[r][i]);
printf("%lld\n",ans);
}
return ;
}
Mr. Rito Post Office的更多相关文章
- AOJ 2200 Mr. Rito Post Office
Mr. Rito Post Office Time Limit : 8 sec, Memory Limit : 65536 KB Problem D: Mr. Rito Post Office あなた ...
- AOJ 2200 Mr. Rito Post Office(Floyd+单调DP)
[题目链接] http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2200 [题目大意] 一张图中有陆路和水路,水路必须要有船才能走,当船 ...
- Aizu - 2200 Mr. Rito Post Office
题意:/*你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处.而且岛 ...
- Mr. Rito Post Office [Aizu-2200] [图论] [DP]
题意:你是某个岛国(ACM-ICPC Japan )上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处.而且岛上 ...
- AOJ 2200 Mr. Rito Post Office (floyd+DP)
题意: 快递到了:你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处 ...
- Aizu:2200-Mr. Rito Post Office
快递 Time limit 8000 ms Memory limit 131072 kB Problem Description 你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,你有一 ...
- ProgrammingContestChallengeBook
POJ 1852 Ants POJ 2386 Lake Counting POJ 1979 Red and Black AOJ 0118 Property Distribution AOJ 0333 ...
- Aizu-2200-floyd+dp
Mr. Rito Post Office 你是一个为远程邮局邮局工作的程序员.你住的地区由几个岛屿组成.每个岛屿都有一个或多个港口城镇.除此之外,还有其他城镇和村庄.为了从一个岛到另一个岛,你必须使用 ...
- 大数据python词频统计之hdfs分发-cacheFile
-cacheFile 分发,文件事先上传至Hdfs上,分发的是一个文件 1.找一篇文章The_Man_of_Property.txt: He was proud of him! He could no ...
随机推荐
- React-Native组件样式合集
最近在阅读RN的文档,但有一点深感遗憾的是——官方对绝大多数RN组件没有用Gif图或者静态图的方式呈现给大家. 所以我通过百度查询,一个一个的查到了这些RN组件的UI表现图,下面呈现给大家 阅前必 ...
- 一次写文,多平台直接粘贴&打造最流畅的写作流程
文字爱好者的痛点 这一段可以跳过,解决办法在后面.因为大家既然痛过,也就懂了. 对于很多文字爱好者来说,都希望写一篇文章后,可以实现多平台发布. 国内的很多平台都开始支持 Markdown,除了微信公 ...
- 腾讯工作近十年大佬:不是我打击你!你可能真的不会写Java
文章核心 其实,本不想把标题写的那么恐怖,只是发现很多人干了几年 Java 以后,都自认为是一个不错的 Java 程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做 Ja ...
- Zookeeper系列一:Zookeeper基础命令操作
有些事不是努力就可以改变的,五十块的人民币设计的再好看,也没有一百块的招人喜欢. 前言 由于公司年底要更换办公地点,所以最近投了一下简历,发现面试官现在很喜欢问dubbo.zookeeper和高并发等 ...
- Spring Boot应用上传文件时报错
问题描述 Spring Boot应用(使用默认的嵌入式Tomcat)在上传文件时,偶尔会出现上传失败的情况,后台报错日志信息如下:"The temporary upload location ...
- 装系统---------- u盘 安装系统
1.首先根据你的电脑品牌进入bios 模式 如何进入: 不同电脑品牌进入bios 方法 进入之后设置启动方式 将第一启动设置为U盘启动设置好后 使用 Fn + F10 保存 2.使用制作好的 U盘 ...
- 查看 Linux 系统版本信息
博客地址:http://www.moonxy.com 一.前言 Linux 下如何查看内核信息.发行版信息,系统位数.CPU 信息等等,Windows 下我们可以通过各种图形化软件来查看,但是对于 L ...
- librosa语音信号处理
librosa是一个非常强大的python语音信号处理的第三方库,本文参考的是librosa的官方文档,本文主要总结了一些重要,对我来说非常常用的功能.学会librosa后再也不用用python去实现 ...
- [VB.NET Tips]赋值运算千万要注意
赋值运算符是一个语句,不能在表达式中使用,表达式中的等号表示相等而不是赋值. 上示例: Dim x As Integer Dim y As Object x = 5 y = x = 5 Console ...
- [Advanced Python] 13 - "Decorator": syntactic sugar
单独一章复习:Python 函数装饰器,廖雪峰讲装饰器 基本概念 函数作为变量 从函数中返回函数 子函数写在外面貌似也可以,可这样就少了“封装性”. def greet(): return " ...