Advertisement
Guest User

Untitled

a guest
Nov 20th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. class przedmiot{
  7.     private:
  8.     int waga;
  9.     int cena;
  10.     public:
  11.     int getWaga(){
  12.         return waga;
  13.     }
  14.     int getCena(){
  15.         return cena;
  16.     }
  17.     int setWaga(int wg){
  18.         waga=wg;
  19.     }
  20.     int setCena(int cn){
  21.         cena=cn;
  22.     }
  23.  
  24. };
  25. void wypisz_wynik(int** s, int n, int W, przedmiot p[]){
  26.  
  27.     if(n==0 || W==0){
  28.             cout<<endl;
  29.         return;
  30.     }
  31.     if(s[n][W]==s[n-1][W] && s[n][W]!=(s[n-1][W-p[n-1].getWaga()])+p[n-1].getCena()){
  32.         wypisz_wynik(s,n-1,W,p);
  33.     }
  34.  
  35.     if(s[n][W]==s[n-1][W] && s[n][W]==(s[n-1][W-p[n-1].getWaga()])+p[n-1].getCena()){
  36.         cout<<n<<" ";
  37.         wypisz_wynik(s,n-1,W-p[n-1].getWaga(),p);
  38.     }
  39.     if(s[n][W]==s[n-1][W] && s[n][W]==(s[n-1][W-p[n-1].getWaga()])+p[n-1].getCena()){
  40.         wypisz_wynik(s,n-1,W,p);
  41.     }
  42.  
  43.     if(s[n][W]!=s[n-1][W] && s[n][W]==(s[n-1][W-p[n-1].getWaga()])+p[n-1].getCena()){
  44.         cout<<n<<" ";
  45.         wypisz_wynik(s,n-1,W-p[n-1].getWaga(),p);
  46.     }
  47.  
  48. }
  49.  
  50.  
  51.  
  52. int main()
  53. {
  54.     fstream wej;
  55.     fstream wyj;
  56.     wej.open("In0302.txt",ios::in);
  57.     wyj.open("Out0302.txt",ios::out);
  58.     int n;
  59.     int pom;
  60.     int W; //rozmiar pleceaka
  61.     wej>>n;
  62.     wej>>W;
  63.     przedmiot Przedmioty[n];
  64.     for(int i=0;i<n;i++){
  65.         wej>>pom;
  66.         Przedmioty[i].setCena(pom);
  67.         wej>>pom;
  68.         Przedmioty[i].setWaga(pom);
  69.     }
  70.  
  71. // algorytm zagadnienia plecakowego
  72.  
  73.  n++;
  74.     W++;
  75.     int **s= new int *[W];
  76.     for(int i=0;i<n;i++){
  77.         s[i]= new int[W];
  78.     }
  79.     for(int i=0;i<n;i++){
  80.         for(int j=0;j<W;j++){
  81.             if(i==0 || j==0){
  82.                 s[i][j]=0;
  83.                 continue;
  84.             }
  85.             if(Przedmioty[i-1].getWaga()>j){
  86.                 s[i][j]=s[i-1][j];
  87.                 continue;
  88.             }
  89.             s[i][j]=max(s[i-1][j-Przedmioty[i-1].getWaga()]+Przedmioty[i-1].getCena(),s[i-1][j]);
  90.         }
  91.     }
  92.  
  93.     for(int i=0;i<n;i++){
  94.         for(int j=0;j<W;j++){
  95.             cout<<s[i][j]<<" ";
  96.         }
  97.         cout<<endl;
  98.     }
  99.    wypisz_wynik(s,n-1,W-1,Przedmioty);
  100.  
  101.     return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement