일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- fluent python
- function
- BlockChain
- Python
- Kubernetes
- Network
- 플랫폼
- 알고리즘
- AWS
- Algorithm
- RabbitMQ
- 백준
- guru
- 이더리움
- docker
- 블록체인
- IMAGE
- 코어 이더리움 프로그래밍
- BAEKJOON
- 러스트
- 동시성
- Container
- Ethereum
- 파이썬
- Thread
- 전문가를 위한 파이썬
- rust
- Refactoring
- Fast API
- dockerfile
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
9465_스티커 본문
728x90
Concept & Idea
문제 접근을 어떻게 할까 하다가 앞에 요소를 체크하려 했는데, 결국 과거의 값을 되돌아 생각해보는 것으로 생각해보니 해결되었다.
row가 0일 경우에, row가 1이고 && col이 자기 자신보다 -1,-2인 값중 큰 값을 누적하여 더한다.row가 1일 경우에, row가 0이고 && col이 자기 자신보다 -1,-2인 값중 큰 값을 누적하여 더한다.
DP배열에는 누적으로 최대값을 쌓아가고, 최종적으로 마지막 col의 최댓값을 출력하면 해결되는 문제였다.
Code
#include <iostream>
using namespace std;
int t;
int map[2][100001];
int cnt=0;
int dp[2][100001];
int main() {
cin>>t;
for(int i=0; i<t; i++) {
int n;
cin>>n;
for(int r=0; r<2; r++) {
for(int j=0; j<n; j++) {
cin>>map[r][j];
}
}
dp[0][0]=map[0][0]; dp[1][0]=map[1][0];
if(n>1) {
dp[0][1]=map[0][1]+map[1][0];
dp[1][1]=map[1][1]+map[0][0];
}
for(int j=2; j<n; j++) {
for(int r=0; r<2; r++) {
if(r==0) {
dp[r][j]=map[r][j]+max(dp[1][j-2], dp[1][j-1]);
} else if(r==1){
dp[r][j]=map[r][j]+max(dp[0][j-2], dp[0][j-1]);
}
}
}
cout<<max(dp[0][n-1],dp[1][n-1])<<endl;
}
}
Fealing
다이나믹 프로그래밍 문제를 한번에 스스로 맞춰버렸다😆
정말 너무 기분이 좋구만!!
728x90
'Algorithm > 2019~2020' 카테고리의 다른 글
1912_연속합 (0) | 2021.04.22 |
---|---|
11055_가장 큰 증가 부분 수열 (0) | 2021.04.22 |
2193_이친수 (0) | 2021.04.22 |
10942_팰린드롬? (0) | 2021.04.22 |
1509_팰린드롬 분할 (0) | 2021.04.22 |
Comments