Advertisement
bolji_programer

Dinamicko programiranje - Problem ruksaka 0/1

Dec 30th, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     int x,n;
  8.     cin>>x;
  9.     cin>>n;
  10.  
  11.     int T[n],V[n];
  12.  
  13.     for (int i=0;i<n;i++)
  14.         cin>>T[i]>>V[i];
  15.  
  16.     int DP[n][x+1];
  17.  
  18.     for (int i=0;i<x+1;i++)
  19.     {
  20.         if (T[0]<=i) DP[0][i]=V[0];
  21.         else DP[0][i]=0;
  22.     }
  23.  
  24.     for (int i=0;i<n;i++)
  25.         DP[i][0]=0;
  26.  
  27.     for (int i=1;i<n;i++)
  28.     {
  29.         for (int j=1;j<x+1;j++)
  30.         {
  31.             if (T[i]>j) DP[i][j]=DP[i-1][j];
  32.             else DP[i][j]=max(DP[i-1][j-T[i]]+V[i],DP[i-1][j]);
  33.         }
  34.     }
  35.  
  36.     cout<<DP[n-1][x]<<endl;
  37.  
  38.     return 0;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement