01 가방 이해 및 공간 최적화 (동적 기획)
3203 단어 Algorithms
2. 문제 분석: 2 차원 배열 을 사용 하여 모든 상 태 를 저장 합 니 다.2 차원 배열 의 크기 는 m [n] [c] 이 고 그 중에서 m [i] [j] 는 앞의 i 개 아 이 템 에서 적당 한 선택 을 하여 가방 용량 j 를 초과 하지 않 을 때 최대 가 치 를 얻 을 수 있 음 을 나타 낸다.m [i] [j] 의 계산 방법 분석
if(j >= w[i]):
m[i][j] = max(m[i-1][j], m[i-1][j-w[i]] + v[i])
else:
m[i][j] = m[i-1][j]
for(int i=1;i<=n;i++) // n
{
for(int j=1;j<=c;j++) // c
{
if(j>=w[i]) //
m[i][j]=max(m[i-1][j],m[i-1][j-w[i]]+v[i]); //
else //
m[i][j]=m[i-1][j];
}
}
위 에서 2 차원 배열 의 마지막 값 m [n] [c] 를 계산 하면 최대 가치 이다.
3. 구조 최 적 화 (앞에서 일 하면 가장 큰 가 치 를 얻 을 수 있 지만 어떤 물건 을 골 라 서 얻 은 최대 치 인지 모 르 겠 음)
void traceback()
{
for(int i=n;i>1;i--)
{
if(m[i][c] == m[i-1][c])
x[i] = 0;
else
{
x[i] = 1;
c -= w[i];
}
}
x[1] = (m[1][c]>0) ? 1 : 0;
}
4. 공간 최적화
void FindMaxBetter()//
{
int i,j;
for(i=1;i<=number;i++)
{
for(j=capacity;j>=0;j--)
{
if(B[j]<=B[j-w[i]]+v[i] && j-w[i]>=0 )//
{
B[j]=B[j-w[i]]+v[i];
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Algorithms / 백준 2667번 파이썬링크 풀이 코드 Algorithms / 백준 2667번 파이썬...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.