-

1005 ACM craft 본문

Algorithm/Baekjoon

1005 ACM craft

Boogallee 2018. 2. 1. 00:28



처음 짜서 런타임에러 + 논리적 오류가 발생한 코드



#include <iostream>

#include <vector>

using namespace std;


int D[1001];

int XY[1001][1001];

int DP[1001];



int main(){


int T = 0, N = 1, K = 1, X, Y, W;


cin >> T;


while (T--)

{

int ans = 0;

cin >> N >> K;

for (int i = 1; i <= N; i++)

{

cin >> D[i];

}


for (int i = 1; i <= K; i++)

{

cin >> X >> Y;

XY[X][Y] = 1;

}

cin >> W;


DP[1] = D[1];

for (int i = 1; i <= N;){

vector<int> V;

for (int j = 1; j <= N; j++){


if (XY[i][j] == 1){

V.push_back(j);   // 1번 건물을 시작으로 연결된 그 다음 건물을 찾습니다.

}

}


int max = 0, z = 0;

for (int k = 0; k < V.size(); k++){

if (max < D[V[k]]){

max = D[V[k]]; z = k + 1;  // 그 다음 건물 중에서 시간이 가장 오래 걸리는 건물을 선정합니다.

}

}

DP[V[z - 1]] = DP[i] + max; // 가장 오래 걸리는 시간과 직전의 건물에 걸리는 시간을 더합니다.


i = V[z - 1];

if (i == W) break;

}

cout << DP[W] << endl;


}


return 0;

}


솔직히 왜 틀린지 모르겠다. 문제를 잘 이해하지 못해서 그런가.. ?



구글링을 통해 재귀 호출방법으로 맞은 코드.


내가 생각했던 것의 반대 방향으로 한 것인데... 물론 내가 짠 코드가 틀린건 분명할것..


재귀함수가 헷갈릴 때, 아래 코드를 계속 생각해봐야겠다.


#include <iostream>

#include <algorithm>

using namespace std;

int DP[1001];

int M[1001][1001], D[1001];

int solve(int W, int N) {

if (DP[W] > 0) return DP[W];


int result = 0;

for (int i = 1; i <= N; i++) {

if (M[i][W] == 1) {

result = max(result, solve(i, N));

}

}

return DP[W] = result + D[W];

}

int main() {

int T;

//scanf("%d", &T);

cin >> T;

for (int i = 0; i < T; i++) {

int N, K, W;

for (int j = 0; j < 1001; j++) D[j] = DP[j] = 0;

for (int j = 0; j < 1001; j++) for (int k = 0; k < 1001; k++) M[j][k] = 0;


//scanf("%d %d", &N, &K);

cin >> N >> K; 

for (int j = 1; j <= N; j++) cin >> D[j];

for (int j = 0; j < K; j++) {

int x, y;

//scanf("%d %d", &x, &y);

cin >> x >> y;

M[x][y] = 1;

}

//scanf("%d", &W);

cin >> W;

printf("%d\n", solve(W, N));

}

system("pause");

return 0;

}



'Algorithm > Baekjoon' 카테고리의 다른 글

11066 파일 합치기[DP]  (0) 2018.02.07
2156 포도주 시식  (0) 2018.02.01
1463 1만들기  (0) 2018.01.30
2579 계단오르기  (0) 2018.01.30
1932 숫자삼각형  (0) 2018.01.30
Comments