Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define endl "\n"
- #define ft first
- #define sd second
- #define openfiles ifstream cin ("library.in");ofstream cout ("library.out");
- #define INF 1000000000
- #define pii pair<int, int>
- #define ll long long
- #define ull unsigned long long
- #define ld long double
- #define pb push_back
- #define in insert
- #define faster ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
- #define EPS 0.0000000000001
- #define no cout << "NO\n";
- #define yes cout << "YES\n";
- using namespace std;
- struct item {
- int t, d, p, n;
- };
- struct win {
- int sc;
- vector<int> a;
- };
- int n;
- vector<item> A;
- vector<vector<win>> D;
- bool cmp (item x, item y) {
- return x.d < y.d;
- }
- int main()
- {
- cin >> n;
- A.assign(n, {0,0,0,0});
- for (int i = 0; i < n; i++) {
- cin >> A[i].t >> A[i].d >> A[i].p;
- A[i].n = i+1;
- }
- sort(A.begin(), A.end(), cmp);
- win jojo;
- jojo.sc = -2;
- jojo.a = {};
- D.assign(n+1, vector<win>(2100, jojo));
- D[0][0] = {0, vector<int>(0,0)};
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < 2100; j++) {
- D[i+1][j] = D[i][j];
- }
- for (int j = 0; j < A[i].d-A[i].t; j++) {
- if (D[i][j].sc != -2) {
- if (D[i+1][j+A[i].t].sc < D[i][j].sc+A[i].p) {
- D[i+1][j+A[i].t].sc = D[i][j].sc+A[i].p;
- D[i+1][j+A[i].t].a = D[i][j].a;
- D[i+1][j+A[i].t].a.pb(A[i].n);
- }
- }
- }
- }
- /*for (int i = 0; i <= n; i++) {
- for (int j = 0; j < 10; j++) {
- cout << D[i][j].sc << " ";
- }cout << endl;
- }cout << endl;*/
- win mx;
- mx.sc = 0;
- mx.a = {};
- for (int j = 0; j < 2100; j++) {
- if (mx.sc < D[n][j].sc) mx = D[n][j];
- }
- cout << mx.sc << endl << mx.a.size() << endl;
- for (int i = 0; i < mx.a.size(); i++) {
- cout << mx.a[i] << " ";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement