일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- IMAGE
- RabbitMQ
- Thread
- fluent python
- Fast API
- AWS
- 이더리움
- dockerfile
- Algorithm
- function
- Ethereum
- 코어 이더리움 프로그래밍
- Network
- Python
- 러스트
- rust
- 백준
- docker
- 전문가를 위한 파이썬
- guru
- Kubernetes
- 동시성
- Refactoring
- 블록체인
- BlockChain
- Container
- 알고리즘
- 파이썬
- 플랫폼
- BAEKJOON
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
2169-로봇 조종하기 본문
728x90
Concept & Idea
최대 배열의 크기가 1002, 1002이기 때문에 백트랙킹으로는 문제를 해결할 수 없다. tmp[2][1002] 배열은 좌측에서 오는 값을 기록, 우측에서 오는 값을 기록하는 배열이다. 이런 방식으로도 메모제이션을 진행할 수 있다는,, 잘 기억해두자!!
Code
#include <iostream>
#include <queue>
using namespace std;
int map[1002][1002];
int dp[1002][1002];
int tmp[2][1002];
int n,m;
int main(){
cin>>n>>m;
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
scanf("%d",&map[i][j]);
if(i==1) {
dp[i][j]=dp[i][j-1]+map[i][j];
}
}
}
for(int i=2; i<=n; i++) {
tmp[0][0]=dp[i-1][1];
for(int j=1; j<=m; j++) {
tmp[0][j]=max(dp[i-1][j],tmp[0][j-1])+map[i][j];
}
tmp[1][m+1]=dp[i-1][m];
for(int j=m; j>=1; j--) {
tmp[1][j]=max(dp[i-1][j],tmp[1][j+1])+map[i][j];
}
for(int j=1; j<=m; j++) {
dp[i][j] = max(tmp[0][j],tmp[1][j]);
}
}
cout<<dp[n][m]<<endl;
}
Fealing
그래프 탐색 중독자인가보다. 좌 우 아래를 탐색한다는 것을 보고, 백트랙킹으로 문제를 풀어버렸다.
근데 1002, 1002면 시간초과가 당연히 날 수 밖에 없는데, 고집부리고 백트랙킹으로 해결한 것 같다.
좌측에서 오는 값, 우측에서 오는 값을 기록해놓는 배열을 하나 더 두면 쉽게 해결할 수 있는 문제였다.
다음에도 이런 문제가 나왔으면 좋겠다.
728x90
'Algorithm > 2019~2020' 카테고리의 다른 글
3020_개똥벌레 (0) | 2021.04.23 |
---|---|
2110-공유기 설치 (0) | 2021.04.23 |
11049-행렬 곱셈 순서 (0) | 2021.04.22 |
1660_캡틴 이다솜 (0) | 2021.04.22 |
14003_가장 긴 증가하는 부분 수열5 (0) | 2021.04.22 |
Comments