fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. //#define mx 1000
  4. //int price[mx],weight[mx],dp[mx][mx];
  5.  
  6. int knapSack(int wt[], int val[], int n, int W)
  7. {
  8. int *dpPrev, *dpCurr, *tmp;
  9. dpPrev = new int[W+1];
  10. dpCurr = new int[W+1];
  11.  
  12. for(int i=0; i<=n; i++)
  13. {
  14. for(int m=0; m<= W; m++)
  15. {
  16. if (i==0 || m==0) dpCurr[m] = 0;
  17.  
  18. else if (wt[i-1] <= m) dpCurr[m] = max(val[i-1] + dpPrev[m-wt[i-1]], dpPrev[m]);
  19.  
  20. else dpCurr[m] = dpPrev[m];
  21. }
  22.  
  23. tmp = dpPrev;
  24. dpPrev = dpCurr;
  25. dpCurr = tmp;
  26. }
  27.  
  28. return dpPrev[W];
  29. }
  30.  
  31.  
  32. int main()
  33. {
  34. int n,W,*va,*wt;
  35.  
  36. cin>>W>>n;
  37.  
  38. va = new int[n];
  39.  
  40. wt = new int[n];
  41.  
  42. for(int i=0;i<n;i++) cin>>va[i]>>wt[i];
  43.  
  44. cout<<knapSack(wt, va, n, W)<<endl;
  45.  
  46.  
  47. return 0;
  48. }
Success #stdin #stdout 0s 3472KB
stdin
10 3
7 3
8 8
4 6
stdout
11