Advertisement
Guest User

D

a guest
Jun 5th, 2018
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define endl "\n"
  4. #define ft first
  5. #define sd second
  6. #define openfiles ifstream cin ("library.in");ofstream cout ("library.out");
  7. #define INF 1000000000
  8. #define pii pair<int, int>
  9. #define ll long long
  10. #define ull unsigned long long
  11. #define ld long double
  12. #define pb push_back
  13. #define in insert
  14. #define faster ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
  15. #define EPS 0.0000000000001
  16. #define no cout << "NO\n";
  17. #define yes cout << "YES\n";
  18.  
  19. using namespace std;
  20.  
  21.     struct item {
  22.         int t, d, p, n;
  23.     };
  24.  
  25.     struct win {
  26.         int sc;
  27.         vector<int> a;
  28.     };
  29.  
  30.     int n;
  31.     vector<item> A;
  32.     vector<vector<win>> D;
  33.  
  34.     bool cmp (item x, item y) {
  35.         return x.d < y.d;
  36.     }
  37.  
  38. int main()
  39. {
  40.     cin >> n;
  41.     A.assign(n, {0,0,0,0});
  42.     for (int i = 0; i < n; i++) {
  43.         cin >> A[i].t >> A[i].d >> A[i].p;
  44.         A[i].n = i+1;
  45.     }
  46.  
  47.     sort(A.begin(), A.end(), cmp);
  48.     win jojo;
  49.     jojo.sc = -2;
  50.     jojo.a = {};
  51.     D.assign(n+1, vector<win>(2100, jojo));
  52.     D[0][0] = {0, vector<int>(0,0)};
  53.     for (int i = 0; i < n; i++) {
  54.         for (int j = 0; j < 2100; j++) {
  55.             D[i+1][j] = D[i][j];
  56.         }
  57.         for (int j = 0; j < A[i].d-A[i].t; j++) {
  58.             if (D[i][j].sc != -2) {
  59.                 if (D[i+1][j+A[i].t].sc < D[i][j].sc+A[i].p) {
  60.                     D[i+1][j+A[i].t].sc = D[i][j].sc+A[i].p;
  61.                     D[i+1][j+A[i].t].a = D[i][j].a;
  62.                     D[i+1][j+A[i].t].a.pb(A[i].n);
  63.                 }
  64.             }
  65.         }
  66.     }
  67.  
  68.     /*for (int i = 0; i <= n; i++) {
  69.         for (int j = 0; j < 10; j++) {
  70.             cout << D[i][j].sc << " ";
  71.         }cout << endl;
  72.     }cout << endl;*/
  73.  
  74.  
  75.     win mx;
  76.     mx.sc = 0;
  77.     mx.a = {};
  78.     for (int j = 0; j < 2100; j++) {
  79.         if (mx.sc < D[n][j].sc) mx = D[n][j];
  80.     }
  81.  
  82.     cout << mx.sc << endl << mx.a.size() << endl;
  83.     for (int i = 0; i < mx.a.size(); i++) {
  84.         cout << mx.a[i] << " ";
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement