Muszę wykonać przegląd wyczerpujący w problemie plecakowym - mam problem z funkcją bruteforce() która zawsze zwraca największą cenę zamiast rozwiązania problemu.
Proszę o wskazówki gdzie popełniam błąd lub o pseudokod który pomoże napisać mi funkcję od nowa (oraz wyrozumiałość, dopiero się uczę)
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <time.h>
using namespace std;
int bruteforce(int ceny[], int wagi[], int W, int waga, int cena)
{
int *A = new int[W];
for (int i = 0;i<W ; i++) {
int j = W;
int xwaga = 0;
int xcena = 0;
int k;
k = 1;
for (j = 0; j < W; j++) {
A[j] += k;
k = A[j] / 2;
A[j] = A[j] % 2;
}
if (k) break;
for (k = 0; k < W; k++) {
if (A[k] == 1) {
xwaga = xwaga + wagi[k];
xcena = xcena + ceny[k];
}
}
if (xcena > cena && xwaga <= waga) {
cena = xcena;
}
}
return cena;
}
int main()
{
int n, W,waga,cena;
cout <<endl<< "pojemnosc placaka: ";
cin >> W;
cout << "ile przedmiotow:";
cin >> n;
cout<<endl;
int *ceny=new int [n+1];
int *wagi = new int [n+1];
for (int i = 0; i < n; i++)
{
waga= (rand()%100)+1;
cena=(rand()%100)+1;
ceny[i]=cena;
wagi[i]=waga;
cout<<"cena: "<<ceny[i]<<" waga: "<<wagi[i]<<endl;
}
cout<<"----------------"<<endl;
int najcenniejszy=ceny[0];
for (int i=0;i<n;i++)
{
if (ceny[i]>najcenniejszy)
najcenniejszy=ceny[i];
}
cout<<"NAJCENNIEJSZY: "<<najcenniejszy<<endl;
int najciezszy=wagi[0];
for (int i=0;i<n;i++)
{
if (wagi[i]>najciezszy)
najciezszy=wagi[i];
}
cout<<"NAJCIEZSZY: "<<najciezszy<<endl;
cout<<"----------------"<<endl;
cout<<"brute force: "<<bruteforce(ceny,wagi,n,najciezszy,najcenniejszy)<<endl;
return 0;
}