10번이 넘는 실패를 겪었다.
dp문제는 정말 너무 사악하다.
얼마나 많이 풀어봐야 적응할 수 있을까?...
#include <iostream>
#include <vector>
#include <algorithm>
long long dp[310] = { 0 };
int main(void) {
int len;
std::cin >> len;
std::vector<int> val;
for (int i = 0; i < len; i++) {
int temp;
std::cin >> temp;
val.push_back(temp);
}
//std::reverse(val.begin(), val.end());
if (val.size() > 2) {
dp[0] = val[0];
dp[1] = val[0] + val[1];
dp[2] = val[1] + val[2] > val[0] + val[2] ? val[1] + val[2] : val[0] + val[2];
}
else {
for (int i = 0; i < val.size(); i++) {
dp[val.size() - 1] += val[i];
}
}
for (int i = 3; i < len; i++) {
dp[i] = dp[i - 2] + val[i] > dp[i - 3] + val[i] + val[i - 1] ? dp[i - 2] + val[i] : dp[i - 3] + val[i] + val[i - 1];
}
std::cout << dp[len - 1] << "\n";
return 0;
}
|
cs |
'problem solving' 카테고리의 다른 글
2667번: 단지번호붙이기 (0) | 2020.03.02 |
---|---|
[미해결]2632번: 피자판매 (0) | 2020.03.01 |
2331번: 반복수열 (0) | 2020.03.01 |
2089번: -2진수 (0) | 2020.02.27 |
2004번: 조합 0의 개수 (0) | 2020.02.25 |