merkator

knapsack3d

Nov 23rd, 2011
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #define FN "knapsack3d"
  2.  
  3. #include<cstdio>
  4. #include<cctype>
  5. #include<iostream>
  6. #include<fstream>
  7. #include<functional>
  8. #include<utility>
  9. #include<vector>
  10. #include<stack>
  11. #include<map>
  12. #include<queue>
  13. #include<deque>
  14. #include<cstdlib>
  15. #include<cmath>
  16. #include<algorithm>
  17. #include<set>
  18. #include<complex>
  19. #include<cstring>
  20. #include<string>
  21. #include<cassert>
  22. #include<iomanip>
  23.  
  24.                
  25. using namespace std;
  26.  
  27. typedef long long LL;
  28. typedef unsigned long long ULL;
  29. typedef vector<int> vi;
  30. typedef pair<int,int> pii;
  31.  
  32. #define pb push_back
  33. #define mp make_pair
  34. #define fi first
  35. #define se second
  36. #define all(n) (n).begin(), (n).end()
  37. #define EPS 1e-9
  38. #define INF 1e9
  39. #define forn(i, n) for(int i = 0; i < (n); ++i)
  40. #define forab(i, a, b) for(int i = a; (i) < (b); ++(i))
  41. #define forba(i, b, a) for(int i = b-1; i >= (a); --i)
  42. #define forit(i, v) for(__typeof((v).begin()) i = (v).begin(); i != (v).end(); ++i)
  43. #define fornr(i,n) for(int i=(n)-1;i>=0;--i)
  44.  
  45.  
  46. vector <int> price, weight, c;
  47.  
  48. int dp[510][510];
  49.  
  50. int main(){
  51. #ifdef FN
  52.     freopen(FN".in", "r", stdin);
  53.     freopen(FN".out", "w", stdout);
  54. #endif
  55.     int n, P, W;
  56.     scanf("%d%d%d", &n, &P, &W);
  57.     price.resize(n), weight.resize(n), c.resize(n);
  58.     forn(i, n){
  59.         scanf("%d%d%d", &price[i], &weight[i], &c[i]);
  60.     }  
  61.     forn(i, n){
  62.         printf("W = %d, P = %d, C = %d\n", weight[i], price[i], c[i]);
  63.     }
  64.     dp[0][0] = 0;
  65.     forab(i, 1, W+1){
  66.         forab(j, 1, P+1){
  67.             dp[i][j] = dp[i-1][j-1];
  68.             forn(k, n){
  69.                 if(weight[k]<=i && price[k]<=j){
  70.                     dp[i][j] = max(dp[i][j], dp[i-weight[k]][j-price[k]]+c[k]);
  71.                 }
  72.             }
  73.         }
  74.     }
  75.     forn(i, W+1){
  76.         forn(j, P+1){
  77.             printf("%d ", dp[i][j]);
  78.         }   puts("");
  79.     }
  80.     printf("%d\n", dp[W][P]);
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment