배낭 알고리즘에 문제가 있습니다. 솔직히 말해서 무엇이 잘못 됐는지 나는 모른다. 프로그램을 한 번 사용하면 모든 것이 잘못 작동하지만 프로그램을 루프 (테스트 용)로 사용할 때 많은 문제가 발생합니다.C++ 배낭 구현
예를 들어: 파일
무게/발 : 100
최대 배낭 용량 : 1000
첫 번째 반복 :
최대 이익 : 2,597
결과 무게 : 1,000분의 994
그리고 그것의 좋은 ,하지만 이제는 또 다른 반복입니다.
두 번째 반복 :
최대 이익 : 2,538
결과 무게 : 1,000분의 1,004 < - 내 문제가 그 내 최대 캡 이상.
3 번째, 4 번째는 오키, 5 번째는 잘못된 것 (1355/1000) 등입니다.
void intoKnapsack(int k, float actual_profit, float actual_weight)
{
if (actual_weight + weight[k] <= cap)
{
tmp[k] = 1;
if (k <= number_items)
intoKnapsack(k + 1, actual_profit + value[k], actual_weight + weight[k]);
if (((actual_profit + value[k]) > final_profit) && (k == number_items))
{
final_profit = actual_profit + value[k];
final_weight = actual_weight + weight[k];
for (j = 0; j <= k; j++)
knap[j] = tmp[j];
}
}
else if ((bound(actual_profit, actual_weight, k) >= final_profit))
{
tmp[k] = 0;
if (k <= number_items)
intoKnapsack(k + 1, actual_profit, actual_weight);
if ((actual_profit > final_profit) && (k == number_items))
{
final_profit = actual_profit;
final_weight = actual_weight;
for (j = 0; j <= k; j++)
knap[j] = tmp[j];
}
}
}
누군가가 내 문제 도와 드릴 :
내 기능은 가능한 문제인가?
당신이 폴란드어 코드를 변환 할 수있는 모든 기회가있다? 그렇지 않으면 우리는 그것을 읽을 수 없습니다. –
완료 : D 이제 쉬워야합니다 – Slideroh
거친 번역 : http://pastebin.com/xVZXFDp4 (고마워, 구글 번역 롤). ** 편집 ** : 아, 그는 Google 번역 xD – SpencerD