티스토리 뷰
문제
https://www.acmicpc.net/problem/10710
알고리즘
동적 계획법
풀이
날씨가 궂으면 쉬고, 좋으면 현재 도시에서 다음 도시로 가는 그리디한 해는 금방 반례가 나오게 됩니다. 현재 날씨가 좋지 않더라도 나중에 거리가 짧은 도시 사이를 좋은 날씨로 가게 되는 케이스가 있다면 걸리기 때문입니다. 즉 모든 상황을 고려할 수 있는 동적 계획법으로 해결하도록 합시다.
$cache[i][j]$= $i$날에 $j$ 도시에 위치할 때, 얻게 되는 최소 피로도
++
$cache$ 값을 갱신할 때, 우리가 필요로 하는 정보는 직전 날에 대한 정보뿐 입니다. 2일 전, 3일 전 정보가 필요가 없습니다. 슬라이딩 윈도우를 통하여 $cache[2][1000]$로 메모리를 최적화할 수 있습니다.
코드
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;++i)
#define REP(i,n) for(int i=1;i<=n;++i)
#define FAST cin.tie(NULL);cout.tie(NULL); ios::sync_with_stdio(false)
using namespace std;
int N, M;
int dist[1005];
int piro[1005];
int cache[1005][1005];
int main() {
FAST;
memset(cache, 0x3f, sizeof(cache));
cin >> N >> M;
REP(i, N) cin >> dist[i];
REP(i, M) cin >> piro[i];
cache[0][0] = 0;
for (int i = 1;i <= M;++i) // 날
for (int j = 0;j <= N;++j) // 위치(도시)
cache[i][j] = min(cache[i - 1][j], cache[i - 1][j - 1] + dist[j] * piro[i]);
cout << cache[M][N];
return 0;
}
'Algorithm' 카테고리의 다른 글
[백준 3033] 가장 긴 문자열 (0) | 2020.07.15 |
---|---|
[백준 2300] 기지국 (0) | 2020.07.14 |
[백준 1796] 신기한 키보드 (3) | 2020.07.11 |
[백준 1787] 문자열의 주기 예측 (0) | 2020.07.09 |
[백준 16229] 반복 패턴 (2) | 2020.07.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Segment tree
- 이분탐색
- string
- implementation
- spring
- sorting
- dijkstra
- spring boot
- 2-SAT
- 펜윅트리
- sweeping
- 스위핑
- Suffix Array
- SCC
- 트라이
- Oracle
- knapsack
- 세그먼트트리
- Fenwick
- 정렬
- 동적계획법
- 이분매칭
- bfs
- DP
- 좌표압축
- dfs
- greedy
- kmp
- union find
- hld
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함