Witam. Dostałem takie zadanie do zrobienia:
- Etap I programowania dynamicznego. Napisz program będący implementacją programowania
dynamicznego dla problemu plecakowego. Jako struktury danych użyj tablicy
wszystkich rozwiązań P oraz tablicy umożliwiającej odczytywanie rozwiązań Q.
Etap II programowania dynamicznego. Napisz program, który danej liczby rzeczy
i pojemności plecaka będzie odczytywał rozwiązanie z tablic utworzonych w Etapie I.
Jakby były jakieś błędy, pomógłby ktoś w poprawieniu kodu?
#include <iostream>
using namespace std;
int main()
{
int i, j, ilosc, pojemnosc;
cout << "Podaj liczbe przedmiotow : ";
cin >> ilosc;
cout << "Podaj pojemnosc plecaka : ";
cin >> pojemnosc;
cout << endl;
int * m = new int[ ilosc ];
int * c = new int[ ilosc ];
int ** Q = new int *[ ilosc + 1 ];
for( i = 0; i <= ilosc; ++i )
Q[ i ] = new int[ pojemnosc + 1 ];
int ** P = new int *[ ilosc + 1 ];
for( i = 0; i <= ilosc; ++i )
P[ i ] = new int[ pojemnosc + 1 ];
for( i = 0; i < ilosc; ++i )
{
cout << "Podaj wartosc przedmiotu : ";
cin >> c[ i ];
cout << "Podaj wage przedmiotu : ";
cin >> m[ i ];
cout << endl;
}
for( i = 0; i <= ilosc; ++i ) {
P[ i ][ 0 ] = 0;
Q[ i ][ 0 ] = 0;
}
for( j = 0; j <= pojemnosc; ++j ) {
P[ 0 ][ j ] = 0;
Q[ 0 ][ j ] = 0;
}
for( i = 1; i <= ilosc; ++i ) {
for( j = 1; j <= pojemnosc; ++j ) {
if(( j >= m[ i - 1 ] ) &&( P[ i - 1 ][ j ] <( P[ i ][ j - m[ i - 1 ] ] + c[ i - 1 ] ) ) ) {
P[ i ][ j ] = P[ i ][ j - m[ i - 1 ] ] + c[ i - 1 ];
Q[ i ][ j ] = i;
}
else {
P[ i ][ j ] = P[ i - 1 ][ j ];
Q[ i ][ j ] = Q[ i - 1 ][ j ];
}
}
}
cout << " Wypisanie tablicy P " << endl;
for( i = 1; i <= ilosc; ++i )
{
for( j = 1; j <= pojemnosc; ++j )
{
cout << P[ i ][ j ] << " ";
}
cout << endl;
}
cout << "Wynik : " << P[ ilosc ][ pojemnosc ] << endl;
return 0;
}