1005번 - ACM Craft
이 문제를 결론적으로 말하면 dfs+dp로 해서 맞았긴했는데,
dfs로만 풀었던 방법이 시간초과도 아니고 틀렸습니다가 나와서 의문입니다.
일단 아래처럼 dfs+dp로 풀어서 맞았고
int dfs(int cur) { int cur_size = adj[cur].size(); int &ret = dp[cur]; if (ret != -1) return ret; ret = 0; for (int i = 0; i < cur_size; i++) { int next_v = adj[cur][i]; ret = max(dfs(next_v), ret); } return ret = dp[cur] + building[cur];}
dp를 적용하지 않았던 방법으로는 소스코드 처럼 풀었는데요...
시간초과나 스택오버플로우인 런타임에러는 이해가지만
왜 틀렸는지는 모르겠습니다..ㅠㅠ
해결했습니다.
1
10 1110 1 1 100 10 10 100 1 1 11 22 33 64 34 74 95 46 97 88 910 79
이케이스에서 잘못된 값이 나왔습니다
좋은 반례네요! 감사합니다
댓글을 작성하려면 로그인해야 합니다.
jh1125kr 7년 전
이 문제를 결론적으로 말하면 dfs+dp로 해서 맞았긴했는데,
dfs로만 풀었던 방법이 시간초과도 아니고 틀렸습니다가 나와서 의문입니다.
일단 아래처럼 dfs+dp로 풀어서 맞았고
int dfs(int cur) {
int cur_size = adj[cur].size();
int &ret = dp[cur];
if (ret != -1) return ret;
ret = 0;
for (int i = 0; i < cur_size; i++) {
int next_v = adj[cur][i];
ret = max(dfs(next_v), ret);
}
return ret = dp[cur] + building[cur];
}
dp를 적용하지 않았던 방법으로는 소스코드 처럼 풀었는데요...
시간초과나 스택오버플로우인 런타임에러는 이해가지만
왜 틀렸는지는 모르겠습니다..ㅠㅠ