기초 가방 문제 정리
16000 단어 알고리즘
int N, V, c[MAXN], w[MAXN], f[MAXN]; //f[i] i
목차
가방
조 가방
완전 가방
다 중 가방
2 차원 비용 가방
01 가방
각 아 이 템 은 하나 뿐 이 므 로 놓 거나 놓 지 않 는 것 을 선택 할 수 있다.
int F() {
memset(f, 0, sizeof(f));
for(int i = 1; i <= N; i++)
for(int j = V; j >= c[i]; j--)
f[j] = max(f[j], f[j-c[i]] + w[i]);
return f[V];
}
패 킷
각 조 는 최대 한 개 만 가 져 갈 수 있다.
int F() {//G , g[i] i
memset(f, 0, sizeof(f));
for(int i = 1; i <= G; i++)
for(int j = V; j >= 1; j--)
for(int k = 1; k <= g[i]; k++)
if(j >= c[i][k]) f[j] = max(f[j-c[i][k]] + w[i][k], f[j]);
return f[V];
}
완전 가방
각 아 이 템 은 무한 여러 번 넣 을 수 있 습 니 다.
int F() {
memset(f, 0, sizeof(f));
for(int i =1 ; i <= N ; i++)
for(int j = c[i]; j <= V; j++)
f[j] = max(f[j], f[j-c[i]]+w[i]);
return f[V];
}
멀 티 백 팩
각 아 이 템 마다 일정 횟수 상한 이 있 습 니 다 n [i]
Void F() {
memset(f, 0, sizeof(f));
for(int i = 1; i <= N ; i++)
for(int k = 1; k <= n[i] ; k++)
for(int j = V ; j >= c[i]; j--)
f[j] = max( f[j], f[j-c[i]]+w[i] );
return f[V];
}
2 차원 비용 가방
각 물품 의 소 모 는 두 개의 c1 과 c2 이 며, 총 용량 도 두 개의 V1, V2 가 있다.
int F() {
memset(f, 0, sizeof(f));
for(int i =1 ; i <= N ; i++)
for(int j = V1; j >= c1[i]; j--)
for(int k = V2; k >= c2[i]; k--)
f[j][k] = max(f[j][k], f[j-c1[i]][k-c2[i]] + w[i]);
return f[V1][V2];
}
/* ,
for(int i = 0; i <= V1; i++)
for(int j = 0; j <= V2; j++)
f[i][j] = -INF;
f[0][0] = 0;
*/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.