백준 문제풀이
[백준][dp] 9465 스티커 c++구현
꽁이꽁설꽁돌
2024. 9. 27. 15:03
728x90
반응형
목차
https://www.acmicpc.net/problem/9465
문제
문제 구현 시 주의점
- 3개 값을 비교하고 싶다면 max를 중첩하자 처음에 아무생각 없이 max안에 인수를 3개 넣어서 무한 오류..
- scanf와 cout 를 혼용하면 안된다 즉 c와 c++혼용해서는 안된다.
- 저런 케이스는 개행문자를 꼭 써주어야 한다.
코드 구현 방향
an1 an2를 구한 뒤 그후부터는 그 전값과 그 전전 값을 비교해서 가장 큰 값을 취해주어 누적하는 방식으로 풀었다.
코드 구현
#include <iostream>
#include <vector>
#include<map>
#include<math.h>
#include <algorithm>
#include<stack>
using namespace std;
typedef long long ll;
vector<int>arr[2];
vector<string>v;
vector<int> ans;
int N, cnt, num;
long long mfunc(int size) {
vector<ll> dp[2];
dp[0].push_back(arr[0][0]);
dp[1].push_back(arr[1][0]);
if (size == 1)
return max(dp[0][0], dp[1][0]);
int a= max(dp[0][0], dp[1][0]);
dp[0].push_back(arr[0][1]+ arr[1][0]);
dp[1].push_back(arr[1][1]+ arr[0][0]);
if (size == 2)
return max(dp[0][1], dp[1][1]);
for (int i = 2; i < size; i++) {
dp[0].push_back(arr[0][i] + max(max(dp[0][i - 2], dp[1][i - 1]), dp[1][i - 2]));
dp[1].push_back(arr[1][i] + max(max(dp[1][i - 2], dp[0][i - 1]), dp[0][i - 2]));
}
return max(dp[0][size - 1], dp[1][size - 1]);
}
void split(string input, string delimiter) {
long long int pos;
string token;
while ((pos = input.find(delimiter)) != string::npos) {
token = input.substr(0, pos);
v.push_back(token);
input.erase(0, pos + delimiter.length());
}
v.push_back(input);
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N;
for (int i = 0; i < N; i++) {
cin >> cnt;
for (int j = 0; j < 2; j++) {
for (int k = 0; k < cnt; k++) {
cin >> num;
arr[j].push_back(num);
}
}
cout << mfunc(cnt)<<'\n';
arr[0].clear();
arr[1].clear();
}
}
반응형