brute force problem plecakowy

0

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;
}


0

Tak na logikę, nie przekazujesz do funkcje pojemności plecaka, więc jak ma ona działać poprawnie?

cout<<"brute force: "<<bruteforce(ceny,wagi,n,najciezszy,najcenniejszy)<<endl;

Może zamiast najcięższego elementu wolałbyś przekazać pojemność plecaka?
I pamiętaj za każdym wywołaniem new powinien iść delete, a u ciebie jakoś ich nie widzę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1