동적 기획----0-1 가방 문제
주어진 물품의 무게 w가치 v 및 물품수 n과 무게받이cap.최대 총 가치를 되돌려 주십시오.
아이디어:
(n+1)(w+1) 2차원 그룹 dp를 구축하는데 그 중에서 dp[i][j]는 i개 물품을 넣을 때 총량이 j를 초과하지 않을 때의 최대 총 가치를 나타낸다.
dp[i][j]에서 i번째 아이템을 넣으려면 앞의 i-1개 아이템의 무게가 j-w[i]를 초과하면 안 되고, i번째 아이템을 넣지 않으려면 앞의 i-1개 아이템의 무게가 j를 초과하면 안 되고,
그래서 그 가치 dp[i][j]=max{dp[i-1][j-w[i]]+v[i], dp[i-1][j]}.
첫 번째 줄의 dp[0][j]에 대해 무게가 0을 초과하지 않기 때문에 물건을 넣지 않으면 가치가 0이고 첫 줄의 모든 값은 dp[0][j]=0이다.
제1열 dp[i][0]에 물품을 넣지 않으면 가치가 0이고 제1열의 모든 값은 dp[i][0]=0이다.
int maxValue(vector w, vector v, int n, int cap) {
// dp
int **dp = new int *[n+1];
for (int i = 0; i < n+1; i++)
{
dp[i] = new int [cap+1];
}
//
for (int i = 0; i < cap+ 1; i++)
{
dp[0][i] = 0;// ,
}
for (int j = 0; j< n+1; j++)
{
dp[j][0] = 0;// ,
}
//
for (int i= 1; i<= n; i++)//
{
for (int j = 1; j <=cap; j++)//
{
dp[i][j] = dp[i - 1][j]; // i
if (j - w[i-1] >= 0)// w,v 0 , 1
dp[i][j] = dp[i][j]>(dp[i - 1][j - w[i-1]] + v[i-1])? dp[i][j]: (dp[i - 1][j - w[i-1]] + v[i-1]);
}
}
return dp[n][cap];
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.