백준 - 퇴사
첫번째 소스코드
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int>v(n);
vector<int>time(n);
vector<int>dp(n);
for (int i = 0; i < n; i++)
{
cin >> time[i];
cin >> v[i];
dp[i] = v[i];
}
int answer = 0;
for (int i = 0; i < n; i++)
{
int nextIdx = time[i] + i;
if (nextIdx < n)
{
dp[nextIdx] = max(dp[nextIdx], v[nextIdx] + dp[i]);
answer = max(answer, dp[nextIdx]);
}
}
cout << answer;
}
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int>v(n);
vector<int>time(n);
vector<int>dp(n);
for (int i = 0; i < n; i++)
{
cin >> time[i];
cin >> v[i];
dp[i] = v[i];
}
int answer = 0;
for (int i = 0; i < n; i++)
{
int nextIdx = time[i] + i;
if (nextIdx < n)
{
dp[nextIdx] = max(dp[nextIdx], v[nextIdx] + dp[i]);
answer = max(answer, dp[nextIdx]);
}
}
cout << answer;
}
-> 테스트 케이스 2번, 4번 틀린다.
https://www.acmicpc.net/source/34371202
점화식
dp[i] : i번부터 마지막날까지 낼수 있는 최대 수익인데,,
dp[i] = max(dp[i + time[i]] + v[i], maxvalue)인데
dp[1] = max(dp[4] + v[1], maxvalue) 라고 할때
문제점이 순차적으로 진행하면 dp[1]에서 끝나므로 뒤에 오는 인덱스들에 영향을
전혀 주지 못하게 된다.
즉 dp[4]가 먼저 계산이 된상태에서 진행이 되어야 한다.
그렇게 만들기 위해서는 역순으로 진행되어야 한다!
Author And Source
이 문제에 관하여(백준 - 퇴사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kwt0124/백준-퇴사저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)