항전 OJ2602------Bone Collector-------01 가방
Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave … The bone collector had a big bag with a volume of V ,and along his trip of collecting there are a lot of bones , obviously , different bone has different value and different volume, now given the each bone’s value along his trip , can you calculate out the maximum of the total value the bone collector can get ?
Input
The first line contain a integer T , the number of cases.
Followed by T cases , each case three lines , the first line contain two integer N , V, (N <= 1000 , V <= 1000 )representing the number of bones and the volume of his bag. And the second line contain N integers representing the value of each bone. The third line contain N integers representing the volume of each bone.
Output
One integer per line representing the maximum of the total value (this number will be less than 2
31).
Sample Input
1
5 10
1 2 3 4 5
5 4 3 2 1
Sample Output
14
가장 간단한 01 가방은 최적화된 1차원 그룹 해법을 사용합니다.
중요한 단계는
for i=1..N
for v=V..0
f[v]=max{f[v],f[v-c[i]]+w[i]};
dev에서는 컴파일할 수 있지만 OJ에서는 안 되기 때문에 그룹 정의를 동적 그룹으로 바꿉니다.
코드:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int N,V;
cin>>N>>V;
vector<int>w(N+1);
vector<int>c(N+1);
vector<int>f(V+1,0);
for(int i=1;i<=N;i++)
cin>>w[i]; //
for(int i=1;i<=N;i++)
cin>>c[i]; //
for(int i=1;i<=N;i++)
for(int v=V;v-c[i]>=0;v--)
{
f[v]=max(f[v],f[v-c[i]]+w[i]);
}
cout<<f[V]<<endl;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깨끗한 것을 보고 싶기 때문에 최적화 함수의 벤치마크에 이용되는 함수의 가시화를 해 보았다결정되지 않음 (자기 만족) 「헤이 이런 거 있어」라고 생각하는 사람 최적화 함수란? 거친 이미지로 1) x + 10 = 25 2) x + 60 = 15 3) x + 45 = 60 의 x를 기계에 구할 때 정확하게 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.