Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4.  
  5. using namespace std;
  6.  
  7. void go(int &ans, int &p, int now, int pr){
  8.     if (ans < now){
  9.         ans = now;
  10.         p = pr;
  11.     }
  12. }
  13.  
  14. int main (){
  15.     int n, best;
  16.     cin >> n;
  17.     vector < int > ans[3];
  18.     int t[n + 1][3][4][6];
  19.     int p[n + 1][3][4][6];
  20.     int v[n][3];
  21.     int num[n];
  22.     for(int i = 0; i < n; i++) cin >> v[i][0] >> v[i][1] >> v[i][2];
  23.     vector < int > take;
  24.     vector < pair < int, int > > buf;
  25.     for(int i = 0; i < 3; i++){
  26.         for(int j = 0; j < n; j++) buf.push_back({v[j][i], j});
  27.         sort(buf.rbegin(), buf.rend());
  28.         for(int j = 0; j < 10; j++) take.push_back(buf[j].second);
  29.         buf.clear();
  30.     }
  31.     sort(take.begin(), take.end());
  32.     take.erase(unique(take.begin(), take.end()), take.end());
  33.     for(int i = 0; i < take.size(); i++){
  34.         for(int j = 0; j < 3; j++) v[i][j] = v[take[i]][j];
  35.         num[i] = take[i];
  36.     }
  37.     n = take.size();
  38.     memset(t, 255, sizeof t);
  39.     memset(p, 255, sizeof p);
  40.     t[0][0][0][0] = 0;
  41.     for(int i = 0; i < n; i++) {
  42.         for(int j = 0; j < 3; j++) {
  43.             for(int k = 0; k < 4; k++) {
  44.                 for(int l = 0; l < 6; l++){
  45.                     go(t[i+1][j][k][l], p[i+1][j][k][l], t[i][j][k][l], -1);
  46.                     if (j + 1 <= 2) go(t[i+1][j+1][k][l], p[i+1][j+1][k][l], t[i][j][k][l] + v[i][2], 2);
  47.                     if (k + 1 <= 3) go(t[i+1][j][k+1][l], p[i+1][j][k+1][l], t[i][j][k][l] + v[i][1], 1);
  48.                     if (l + 1 <= 5) go(t[i+1][j][k][l+1], p[i+1][j][k][l+1], t[i][j][k][l] + v[i][0], 0);
  49.                 }
  50.             }
  51.         }
  52.     }
  53.     best = t[n][2][3][5];
  54.     int j = 2, k = 3, l = 5;
  55.     for(int i = n - 1; i > -1; i--){
  56.         int now = p[i + 1][j][k][l];
  57.         if (now == -1) continue;
  58.         ans[now].push_back(num[i]);
  59.         if (now == 0) l--;
  60.         if (now == 1) k--;
  61.         if (now == 2) j--;
  62.     }
  63.     for(int i = 0; i < 3; i++) {
  64.         for(int j = 0; j < ans[i].size(); j++) cout  << ans[i][j] + 1 << " ";
  65.         cout << endl;
  66.     }
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement