UVA1025 城市里的間諜 A Spy in the Metro

UVA1025 城市里的間諜 A Spy in the Metro

題面翻譯

題目大意

某城市地鐵是一條直線,有 n n n 2 ≤ n ≤ 50 2\leq n\leq 50 2n50)個車站,從左到右編號 1 … n 1\ldots n 1n。有 M 1 M_1 M1? 輛列車從第 1 1 1 站開始往右開,還有 M 2 M_2 M2? 輛列車從第 n n n 站開始往左開。列車在相鄰站臺間所需的運行時間是固定的,因為所有列車的運行速度是相同的。在時刻 0 0 0,Mario 從第 1 1 1 站出發,目的在時刻 T T T 0 ≤ T ≤ 200 0\leq T\leq 200 0T200)會見車站 n n n 的一個間諜。在車站等車時容易被抓,所以她決定盡量躲在開動的火車上,讓在車站等待的時間盡量短。列車靠站停車時間忽略不計,且 Mario 身手敏捷,即使兩輛方向不同的列車在同一時間靠站,Mario 也能完成換乘。

輸入格式

輸入文件包含多組數據。

每一組數據包含以下 7 7 7 行:

第一行是一個正整數 n n n,表示有 n n n 個車站。

第二行是為 T T T,表示 Mario 在時刻 T T T 會見車站 n n n 的間諜。

第三行有 n ? 1 n-1 n?1 個整數 t 1 , t 2 , … , t n ? 1 t_1,t_2,\ldots,t_{n-1} t1?,t2?,,tn?1?,其中 t i t_i ti? 表示地鐵從車站 i i i i + 1 i+1 i+1 的行駛時間。

第四行為 M 1 M_1 M1?,及從第一站出發向右開的列車數目。

第五行包含 M 1 M_1 M1? 個正整數 a 1 , a 2 , … , a M 1 a_1,a_2,\ldots,a_{M_1} a1?,a2?,,aM1??,即每個列車出發的時間。

第六行為 M 2 M_2 M2? ,即從第 n n n 站出發向左開的列車數目。

第七行包含 M 2 M_2 M2? 個正整數 b 1 , b 2 , … , b M 2 b_1,b_2,\ldots,b_{M_2} b1?,b2?,,bM2??,即每個列車出發的時間。

輸入文件以一行 0 0 0 結尾。

輸出格式

有若干行,每行先輸出 Case Number XXX : (XXX為情況編號,從 1 1 1 開始),再輸出最少等待時間或 impossible(無解)。

題目描述

PDF

輸入格式

輸出格式

樣例 #1

樣例輸入 #1

4
55
5 10 15
4
0 5 10 20
4
0 5 10 15
4
18
1 2 3
5
0 3 6 10 12
6
0 3 5 7 12 15
2
30
20
1
20
7
1 3 5 7 11 13 17
0

樣例輸出 #1

Case Number 1: 5
Case Number 2: 0
Case Number 3: impossible

Solution

采用動態規劃算法

dp[i][j]代表第i時刻到在第j站的等待的時間,因為要在T時間內達到第n站,且要求盡可能多的時間在地鐵上度過,由此可以知要求dp[T][n]=0,通過逆向遞推建立狀態轉移方程,可以得到以下三種情況

  1. dp[i][j]=dp[i+1][j]+1,即dp[i][j] 為在i+1時刻在第j站的所等待的時間+1
  2. dp[i][j]=min(dp[i+t[j]][j+1],dp[i][j]),即若第i時刻存在向右開的車,且此時到達下一個站的時間不大于T時,dp[i][j]為第i+t[j]時刻在第j+1站臺所等待的時間與在在這個站臺等待的時間點最小值
  3. dp[i][j]=min(dp[i+t[j-1]][j-1],dp[i][j]),即若第i時刻存在向左開的車,且此時到達下一個站的時間不大于T時,dp[i][j]為第i+t[j-1]時刻在第j-1站臺所等待的時間與在在這個站臺等待的時間點最小值

然后最終等待時間為dp[0][1],即在0時刻在1站臺時等待的時間

//
// Created by Gowi on 2023/11/23.
//#include <iostream>
#include <cstring>#define maxN 100
#define MaxT 300
#define INF 1000000000using namespace std;int T, t[maxN], a[maxN], b[maxN], M1, M2, n;
int has_train[MaxT][maxN][2];// has_train[i][j][1/2] i時刻在第j個站是否有向右(0)/左(1)開的火車
int dp[MaxT][maxN]; //dp[i][j]i時刻在第j個站需要等待多長時間bool init() {int d;cin >> n;if (n == 0) {return false;}memset(t, 0, sizeof(t));memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));memset(has_train, 0, sizeof(has_train));memset(dp, 0, sizeof(dp));cin >> T;for (int i = 1; i < n; ++i) {cin >> t[i];}cin >> M1;for (int i = 1; i <= M1; ++i) {cin >> a[i];d = a[i];for (int j = 1; j < n; ++j) {has_train[d][j][0] = 1;d += t[j];}}cin >> M2;for (int i = 1; i <= M2; ++i) {cin >> b[i];d = b[i];for (int j = n - 1; j > 0; j--) {has_train[d][j+1][1] = 1;d += t[j];}}return true;
}int main() {int k = 0;while (init()) {for (int i = 1; i < n; ++i) {dp[T][i] = INF;}dp[T][n] = 0;for (int i = T - 1; i >= 0; i--) {for (int j = 1; j <= n; ++j) {dp[i][j] = dp[i + 1][j] + 1; // 等待一分鐘if (j < n && has_train[i][j][0] && i + t[j] <= T) { //若此時向右有車,且到達下一個站的時間不大于Tdp[i][j] = min(dp[i][j], dp[i + t[j]][j + 1]); //狀態轉移方程}if (j > 1 && has_train[i][j][1] && i + t[j-1] <= T) { //若此時向左有車,且到達下一個站的時間不大于Tdp[i][j] = min(dp[i][j], dp[i + t[j - 1]][j - 1]); //狀態轉移方程}}}cout << "Case Number " << ++k << ": ";if (dp[0][1] >= INF) {cout << "impossible" << endl;} else {cout << dp[0][1] << endl;}}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167507.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167507.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167507.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【電路筆記】-分壓器

分壓器 文章目錄 分壓器1、概述2、負載分壓器3、分壓器網絡4、無功分壓器4.1 電容分壓器4.2 感應分壓器 5、總結 有時&#xff0c;需要精確的電壓值作為參考&#xff0c;或者僅在需要較少功率的電路的特定階段之前需要。 分壓器是解決此問題的一個簡單方法&#xff0c;因為它們…

【Vue】filter的用法

上一篇&#xff1a; vue的指令 https://blog.csdn.net/m0_67930426/article/details/134599378?spm1001.2014.3001.5502 本篇所使用指令 v-for v-on v-html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…

在vscode下將ipynb文件轉成pdf的方法

正常情況下&#xff0c;可以在vscode的ipynb界面點擊上面的三個點&#xff0c;里面有export&#xff0c;可以選擇直接輸出html和pdf&#xff0c;但是需要latex&#xff0c;由于按扎u安裝麻煩&#xff0c;所以我換了一種方法。 ----------------------------------------------…

記一次docker服務啟動失敗解決過程

環境&#xff1a;centos 7.6 報錯&#xff1a;start request repeated too quickly for docker.service 由于服務器修復了內核漏洞&#xff0c;需要重啟&#xff0c;沒想到重啟后&#xff0c;docker啟動失敗了 查看狀態 systemctl status docker如下圖 里面有一行提示&…

網絡互聯與IP地址

目錄 網絡互聯概述網絡的定義與分類網絡的定義網絡的分類 OSI模型和DoD模型網絡拓撲結構總線型拓撲結構星型拓撲結構環型拓撲結構 傳輸介質同軸電纜雙絞線光纖 介質訪問控制方式CSMA/CD令牌 網絡設備網卡集線器交換機路由器總結 IP地址A、B、C類IP地址特殊地址形式 子網與子網掩…

[NOIP2013 提高組] 積木大賽

Description 春春幼兒園舉辦了一年一度的“積木大賽”。今年比賽的內容是搭建一座寬度為 n 的大廈&#xff0c;大廈可以看成由 n 塊寬度為 1 的積木組成&#xff0c;第 i 塊積木的最終高度需要是 hi?。 在搭建開始之前&#xff0c;沒有任何積木&#xff08;可以看成 n 塊高度…

使用rsync從OpenShift的pod復制文件

環境 Red Hat Enterprise Linux release 8.6 (Ootpa)OCP 4.12.22 準備 安裝rsync&#xff1a; yum install rsync 查看pod&#xff1a; [rootapi.kai1123.cp.fyre.ibm.com ~]# oc get pod -n cpd-instance | grep dmc ...... ibm-dmc-1700727413211000-monitor-0 …

DCDC電感發熱嘯叫原因分析

一、電感發熱嘯叫原因解析 發熱原因&#xff1a;電感飽和&#xff0c;實際使用的電感值<理論電感計算值 原因1&#xff1a;電感選擇過小&#xff0c;計算值不合理。 原因2&#xff1a;PCB布局不合理&#xff0c;屏蔽型電感下方應設禁止鋪銅區。 嘯叫原因&#xff1a; 人耳的…

Log4j2.xml不生效:WARN StatusLogger Multiple logging implementations found:

背景 將 -Dlog4j.debug 添加到IDEA的類的啟動配置中 運行上圖代碼&#xff0c;這里log4j2.xml控制的日志級別是info&#xff0c;很明顯是沒生效。 DEBUG StatusLogger org.slf4j.helpers.Log4jLoggerFactory is not on classpath. Good! DEBUG StatusLogger Using Shutdow…

小數化分數

【問題描述】 任何小數都能表示成分數的形式&#xff0c;對于給定的小數&#xff0c;編寫程序其化為最簡分數輸出&#xff0c;小數包括簡單小數和循環小數。 【輸入形式】 第一行是一個整數N&#xff0c;表示有多少組數據。 每組數據只有一個純小數&#xff0c;也就是整…

Camera Raw v16.0.0(PS Raw增效工具)

Camera Raw 16是一款允許攝影師處理原始圖像文件的軟件PS增效工具。原始圖像文件是未經相機內部軟件處理的數碼照片&#xff0c;因此包含相機傳感器捕獲的所有信息。Camera Raw 為攝影師提供了一種在將原始文件轉換為更廣泛兼容的格式&#xff08;如 JPEG 或 TIFF&#xff09;之…

搭建SRS視頻服務器

去官方網站下載FFmpeg6.1 https://ffmpeg.org/download.html拷貝到CentOS7.9中的/opt目錄下&#xff0c;解壓并重命名 tar -xvf ffmpeg-6.1.tar.xz 解壓后編譯安裝 ./configure make make install從github下載SRS4.0release 解壓后 如果ffmpeg的路徑不在/usr/local/bin/ffmpe…

【MATLAB】全網入門快、免費獲取、持續更新的科研繪圖教程系列2

14 【MATLAB】科研繪圖第十四期表示散點分布的雙柱狀雙Y軸統計圖 %% 表示散點分布的雙柱狀雙Y軸統計圖%% Made by Lwcah &#xff08;公眾號&#xff1a;Lwcah&#xff09; %% 公眾號&#xff1a;Lwcah %% 知乎、B站、小紅書、抖音同名賬號:Lwcah&#xff0c;感謝關注~ %% 更多…

LeetCode二叉樹小題目

Q1將有序數組轉換為二叉搜索樹 題目大致意思就是從一個數組建立平衡的二叉搜索樹。由于數組以及進行了升序處理&#xff0c;我們只要考慮好怎么做到平衡的。平衡意味著左右子樹的高度差不能大于1。由此我們可以想著是否能用類似二分遞歸來解決。 如果left>right,直接返回nul…

IO多路轉接之epoll

目錄 一. epoll的實現原理 二. epoll的相關接口 2.1 epoll_create -- 創建epoll模型 2.2 epoll_ctl -- 對epoll模型進行控制 2.3 epoll_wait -- 等待epoll所關注的事件就緒 2.4 epoll相關接口的使用方法 三. Epoll服務器的模擬實現 3.1 EpollServer類的聲明 3.2 Epoll…

網工內推 | 美的、得力集團,包吃包住,IE認證優先,14薪

01 美的 招聘崗位&#xff1a;網絡工程師 職責描述&#xff1a; 1.負責IT網絡設備、IDC機房的日常維護巡檢、監控和管理&#xff1b; 2.負責路由、交換、防火墻、無線控制器、AP等網絡設備的開通、調整、優化升級&#xff1b; 3.負責公司OT、IT網絡規劃&#xff0c;項目實施以…

路由VRRP配置例子

拓樸如下&#xff1a; 主要配置如下&#xff1a; [R1] interface GigabitEthernet0/0/0ip address 10.1.1.1 255.255.255.0 vrrp vrid 1 virtual-ip 10.1.1.254vrrp vrid 1 priority 200vrrp vrid 1 preempt-mode timer delay 20 # interface GigabitEthernet0/0/1ip address …

【10套模擬】【10】

關鍵字&#xff1a; 線性探測次數、冒泡交換性質、排序次數最值、bst查找關鍵字最多比較次數、m叉樹空指針域 鏈表合并、二叉排序樹查找x、堆排序

flink的集成測試

背景 日常測試中我們使用flink的TestHarness只能測試單個算子&#xff0c;很多情況下我們需要集成測試來測試真正的問題&#xff0c;所以在flink中進行集成測試還是非常有必要的&#xff0c;本文就來記錄下如何在flink中進行集成測試 flink中進行集成測試 flink中進行集成測…

css給盒子寫四個角

如圖&#xff1a;之前一直用定位 現在發現可以用css寫 background: linear-gradient(to top, #306eef, #306eef) left top no-repeat, /*上左*/ linear-gradient(to right, #306eef, #386eef) left top no-repeat, /*左上*/ linear-gradient(to left, #386eef, #306eef) righ…