순진한 접근 방식 인 "배열에 저장 응답"이 작동합니다. C [i]는 코인 값, W [i]는 코인 중량, N은 코인 수를 나타냅니다.
재귀 부분은 다음과 같습니다
long sum = 0;
for (int i = 0; i < N; ++i)
if (C[i] <= x)
sum += W[i] + total_change_weight(x-C[i]);
샘플 프로그램을 입력, 출력 및 C/W 초기화하지 않고 다음과
#define N 10
#define MAX_VALUE 101
long C[N];
long W[N];
long totals[MAX_VALUE];
long total_change_weight(long x)
{
if (x == 0)
return 0;
if (totals[x] >= 0)
return totals[x];
long sum = 0;
for (int i = 0; i < N; ++i)
if (C[i] <= x)
sum += W[i] + total_change_weight(x-C[i]);
totals[x] = sum;
return sum;
}
void main()
{
long value = 100;
//initialize C
...
//initialize W
...
//initialize totals
for (long i = 0; i < MAX_VALUE; ++i)
totals[i] = -1;
long result = total_change_weight(value);
}
그것은 분명, 어떻게 가중치가 고려됩니다되지 않는 이유는 무엇입니까? – MBo