동전 교환 문제로, 앞으로 또는 뒤로 재발을 사용할 수 있습니다. ur 문에서는 u가 뒤로 사용되었습니다. 여기에 앞으로의 방법을 알려 드리겠습니다. 그리고 무제한 버전과 AT-MOST-ONCE 버전을 쉽게 해결할 수 있습니다.
f가 1D 부울 배열이라고 가정합니다. f [i]는 u가 값 i에 대해 변경을 할 수 있는지 여부를 나타냅니다. 처음에는 f [0] = true이고, 다른 것은 false와 같습니다.
UNLIMITED 버전 :
for (int i=1;i<=n;i++)
for (int j=0;j<v;j++)
if (f[j])
f[j+x[i]]=true;
AT-MOST-ONCE 버전 :
for (int i=1;i<=n;i++)
for (int j=v-1;j>=0;j--)
if (f[j])
f[j+x[i]]=true;
유일한 차이는 루프 J위한 순서이다.
u를 이해하는 데 도움이 예 :
비용 경화의 한 종류가 가정 2. 즉 X [1] = 2. 제 1 알고리즘 이후에, v = 1
일 때, u는 f [0] = f [2] = f [4] = f [6] = f [8] = f [10] = 참을 얻을 수있다.
그러나 두 번째 알고리즘의 경우 u는 f [0] = f [2] = true 만 얻을 수 있습니다.
3D 불린 배열이 있다면? 기하 급수적으로 증가하지 않고 한 번만 버전을 설치하는 방법은 무엇입니까? – user2125722