清北學堂 最大速度

2022-05-28 11:39:11 字數 2172 閱讀 4069

最大速度

(maxv.pas/c/cpp)

【問題描述】

ron的老爸的flying car出了些問題,現在必須要在地上跑到很大的速度才能飛起來,但是flying car飛起來的那一刻不能被麻瓜看到。為了確保安全飛起來,需要知道車到可以飛起來的地方時所能達到的最大速度。他的flying car一開始擁有乙個初速度,移動一次增加速度1;因為車道很窄,寬度只有1,所以僅當要轉向的方向有路時才能轉,左轉一次減少速度35,右轉一次減少速度40,當前進、左轉、右轉都無路可走的時候,調頭(連左轉兩次或連右轉兩次也認為是調頭)才可以,調頭每次速度變為0;速度不會小於0,如果當前速度小於等於要減少的速度,則減少速度為0。

給出一張地圖,取向上為北方,要求你求出從起始點到達起飛點時速度最大的路徑。幸運的是,所有的道路都是正北、正南、正西或正東方向的。只有乙個起點、乙個起飛點,他們之間總存在可通達的路徑。同時由於地圖周圍一圈均是障礙區,所以flying car是沒有可能開出道路的。

【輸入檔案】(maxv.in)

(1)第一行有3個整數,地圖高度h、寬度w和初速度v。

(2)其後h行每行w個字母,將是以下字母中的乙個:

『.』表示障礙區

『#』表示道路

『e』表示起始點且flying car面朝東

『w』表示起始點且flying car面朝西

『n』表示起始點且flying car面朝北

『s』表示起始點且flying car面朝南

『f』表示起飛點

【輸出檔案】(maxv.out)

輸出檔案maxv.out只有一行,只輸出乙個整數,即為最大速度。

【輸入樣例】

5 8 200                        

........

...#....

...#....

...#n#f.

........

【輸出樣例】

【注釋】

樣例是這樣實現的:右轉一次,速度變為160,然後flying car向前移動2個單位長度到達起飛點,速度增加2,於是當flying car到達起飛點的時候,最大的速度為162。

【資料規模】

對於100%的資料

4<=h<=30

4<=w<=30

1<=v<=10000

/*

搜尋+模擬 找出最大答案

*/#include

#include

#include

using

namespace

std;

const

int n=35

;int ans,ex,ey,f[n][n][4

];char

mp[n][n];

void dfs(int x,int y,int dr,int n,int

last)

if(n<=ans-31) return

;

if(dr==0) //

else

if(dr==1) //

else

if(dr==2) //

西

else

if(dr==3) //南 }

intmain()

if(mp[i][j]=='n'

)

if(mp[i][j]=='w'

)

if(mp[i][j]=='s'

)

if(mp[i][j]=='f'

) }}

dfs(sx,sy,d,v,d);

for(int i=0;i<4;i++)

ans=max(ans,f[ex][ey][i]);

printf("%d

",ans);

return0;

}

清北學堂 2017 10 01

problem 1.alien input file alien.in output file alien.out time limit 1s memory limit 128m 小y 最近正在接受來自x3 星球的外星人的採訪。在那個星球上,每個人的名字都是乙個正整數。所有在這個星球上的居民都是相互...

清北學堂 2017 10 06

因為是剛聽完課所以想把思路記下來,有一些其實也是一知半解的,如果有dalao可以幫忙講解那真是再感謝不過了。還有為什麼我畫圖這麼醜,哇的一下哭出聲 problem a.最佳進製 如今我們最常用的是十進位制,據說這是因為人有十根手指。但事實上這並不是十分方便,10 只有四個因子 1 2 5 10,像 ...

清北學堂 Pa

pa 題目描述 漢諾塔公升級了 現在我們有?個圓盤和?個柱子,每個圓盤大小都不一樣,大的圓盤不能放在小的圓盤上面,個柱子從左到右排成一排。每次你可以將一 個柱子上的最上面的圓盤移動到右邊或者左邊的柱子上 如果移動之後是合法的 話 現在告訴你初始時的狀態,你希望用最少的步數將第?大的盤子移動到第?根 ...