洛谷AT360 雨上 dp

2021-09-27 07:03:53 字數 1585 閱讀 7437

題目翻譯

給定一條長為n的路,每一單位的路段可能為 x (水坑)或 . (空地),要求經過最少的水坑到達n這裡,每一步可以走1、2、3單位長的距離。

感謝@xusiyuan 提供的翻譯

題目描述

僕の家から大學までは***の道路で結ばれている.道路は區間に分けることができ,ここでは,道路を一行の文字列で表すことにする.各文字が1つの區間に相當し,1文字目が家の前の區間,最後の文字が大學の前の區間を表している.

ここで,各文字の意味は次のとおりである.

. : 普通の區間

x : 水たまりのある區間

僕は家の前の區間からスタートし大學へ向かう.僕は現在位置から 1 1 1 つ, 2 2 2 つ,もしくは 3 3 3 つ先の區間(大學のある方向)へ進むことができる.もし,移動した先の區間に水たまりがある場合,僕は水たまりを踏むはめになる.買ったばかりの靴を汚したくないので,なるだけ水たまりを避けたい.また,大學の前の道路を超えて移動するようなことはできない.

家の前の道路から大學の前の道路まで適切な進み方で向かうとき,最低限踏まなければならない水たまりの數を求めてほしい.

輸入格式

入力は以下の形式で標準入力から與えられる.

$ n $

$ s $

1 1 1 行目に區間の數を表す n n n ( 3 ≦ n ≦ 100 3\ ≦\ n\ ≦\ 100 3 ≦ n ≦ 100 ) が與えられる.

2 2 2 行目には, n n n 文字の文字列 s s s が與えられる.これらは道路の區間のデータである.

s s s に出現する文字は '.', 'x' のいずれかであり,意味は上に記した通りである.

s s s の最初と最後の文字は必ず '.' である.

輸出格式

最低限踏まなければならない水たまりの數を標準出力に 1 1 1 行で出力せよ.

なお、最後には改行を出力せよ.

輸入輸出樣例

輸入 #1

5.***.

輸出 #1

輸入 #2

10.x.******.

輸出 #2

輸入 #37…

輸出 #3

dp遍歷一遍就行了

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace std;

int dp[

30001];

char a[

30001];

intmin1

(int x,

int y,

int z)

intmain()

for(

int i =

3; i < n; i++

)else

} cout << dp[n -1]

<< endl;

}

AT360 雨上 動態規劃

思路 我們用dp i 來表示第i個元素存走到i時最少經過的水坑數。dp i 明顯可以從 i 1 i 2 i 3得來。那麼我們肯定要走跨過水坑數最小的那一條path,所以我們每次可以從這3條路徑中找出最小的一條路徑 判斷當前的目的地是否有水坑。核心 for int i 4 i n i dp i dp ...

洛谷dp記錄

線性dp,分開處理資料 include using namespace std const int n 300010 int m,s,t,dp n dpt n 分開計算跑步還是等待 intmain 能閃現就閃現 else 不能閃現就都記錄下來 for int i 1 i t i cout no en...

洛谷 AT763 感雨時刻 整理

雨 降 時刻 降水量 並 重要 今 11 日 雨 降 時刻 関 見 整理 雨 降 時刻 調 思 整理 以下 規則 従 行 雨 降 時刻 整理 降 始 時刻 早 順番 降 始 時刻 降 終 時刻 區切 出力 際 連続 11 雨 11 行 出力 時刻 形式 入力 同 形式 用 出力 末尾 改行 入 第一...