HyeLog
๋ฐฑ์ค_11060_์ ํ ์ ํ ๋ณธ๋ฌธ
๐โ๏ธ ๋ฌธ์
https://www.acmicpc.net/problem/11060
11060๋ฒ: ์ ํ ์ ํ
์ฌํ์ด๊ฐ 1×N ํฌ๊ธฐ์ ๋ฏธ๋ก์ ๊ฐํ์๋ค. ๋ฏธ๋ก๋ 1×1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๊ฐ ์นธ์๋ ์ ์๊ฐ ํ๋ ์ฐ์ฌ ์๋ค. i๋ฒ์งธ ์นธ์ ์ฐ์ฌ ์๋ ์๋ฅผ Ai๋ผ๊ณ ํ์ ๋, ์ฌํ์ด๋ Ai์ดํ๋งํผ ์ค๋ฅธ์ชฝ์ผ๋ก
www.acmicpc.net
๐งฉ ์๊ณ ๋ฆฌ์ฆ
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (DP)
๐ก ์์ด๋์ด
D[i] = i๋ฒ ์นธ์ ๋์ฐฉํ ์ ์๋ ์ต์ ์ ํ ํ์
j๋ฒ์งธ ์นธ์์ i๋ฒ์งธ ์นธ์ผ๋ก ๊ฐ ๋(j < i), i - j ≤ Aj ์
D[i] = min(D[j]) + 1
๐ฉ๐ป ์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
// input
int n;
cin >> n;
vector<int> a(n);
vector<int> d(n, -1);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
// dp
d[0] = 0; // ์์์นธ
for (int i = 0; i < n - 1; i++) { // ์์ผ๋ก ๊ฐ ์ ์๋ ์นธ ๋ค ํด๋ณด๊ธฐ
if (d[i] == -1) continue; // ํด๋น ์นธ๊น์ง ๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ๋์ด๊ฐ
for (int j = 1; j <= a[i]; j++) {
if (i + j >= n) { // n๋ฒ์งธ ์นธ ๋๋ฌ์ ๋ฉ์ถค
break;
}
if (d[i + j] == -1 || d[i + j] > d[i] + 1) { // i+j ๋ฒ ์นธ์ผ๋ก ๊ฐ๋ ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ด๊ฑฐ๋ i๋ฅผ ํตํด์ ๊ฐ๋๊ฒ ์ต์์ธ ๊ฒฝ์ฐ
d[i + j] = d[i] + 1;
}
}
}
// output
cout << d[n - 1] << '\n';
return 0;
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3085_์ฌํ๊ฒ์ (0) | 2022.12.23 |
---|---|
1978_์์ ์ฐพ๊ธฐ (0) | 2022.12.08 |
๋ฐฑ์ค_11048_์ด๋ํ๊ธฐ (0) | 2022.08.02 |
๋ฐฑ์ค_17142_์ฐ๊ตฌ์3 (0) | 2022.07.14 |
๋ฐฑ์ค_17141_์ฐ๊ตฌ์2 (0) | 2022.07.14 |