DP를 사용하여이 고전적인 문제를 해결할 때 구현 문제가 발생했습니다. 문제는 동전 세트가 주어지며 변경 방법의 수를 반환합니다.변경 동전 구현 문제
민주당 방정식은 다음과 같은 것이다 : DP [I] + = DP [I - 경화 [J] DP가 [I] I에 대한 변경을 수행하는 방법의 수를 의미
. , INT 코인 [] = {1, 5} 변화 = 6
make_change_wrong (동전 2
int make_change_wrong(int coin[], int size, int change) {
vector<int> DP(change + 1, 0);
DP[0] = 1;
for (int i = 1; i <= change; ++i) {
for (int j = 0; j < size; ++j) {
if (i - coin[j] >= 0) {
DP[i] += DP[i - coin[j]];
}
}
}
return DP[change];
}
주어진 입력 :
여기서 간단 잘못 구현이며 6)은 3을 반환하지만 2는 정확합니다. 그들은 같은 일이있어,
int make_change(int coin[], int size, int change) {
vector<int> DP(change + 1, 0);
DP[0] = 1;
for (int i = 0; i < size; ++i) {
for (int j = coin[i]; j <= change; ++j) {
DP[j] += DP[j - coin[i]];
}
}
return DP[change];
}
이
나 때문에 나에게 많이 의아해 ... : 같은 논리를 사용 는, 나는 덜 직관적 인 방법으로 그것을 쓰기 다시하고 정확한 답변을 얻을 누군가 두 가지 구현의 문제에 대해 약간 설명 할 수 있습니까?
두 가지 구현간에 서로 다른 대답을 얻는다면 명확하게 동일하지 않습니다.아마도 DP 배열의 내용을 출력 할 때 일부 디버깅 문을 삽입 할 수 있습니다. 이것은 그들이 어떻게 다른지 설명하는 데 도움이 될 수 있습니다. –
Brian, 첫 번째 함수는 {1,1,1,1,1}을 두 번 계산합니다. 두 번째 계산이 올바르게 계산되는 이유를 알지 못했습니다. 두 가지 방법으로 만 코딩됩니다. – galactica