Submission #1291689

#TimeUsernameProblemLanguageResultExecution timeMemory
1291689julia_08Carnival Tickets (IOI20_tickets)C++20
27 / 100
275 ms72416 KiB
#include <bits/stdc++.h>
#include "tickets.h"

using ll = long long;

using namespace std;

const int MAXN = 1510;
const ll INF = 1e18;

ll mn[MAXN], mx[MAXN];

ll dp[MAXN][MAXN];

ll find_maximum(int k, vector<vector<int>> x){

	int n = x.size();
	int m = x[0].size();

	vector<vector<int>> ans;

	for(int i=0; i<n; i++){
		ans.push_back({});
	  for(int j=0; j<m; j++) ans[i].push_back(-1);
	}

  for(int i=0; i<=n; i++){
    for(int j=0; j<=n; j++){
      dp[i][j] = -INF;
    }
  }

  dp[0][0] = 0;

  for(int i=1; i<=n; i++){

    int mn = x[i - 1][0], mx = x[i - 1][m - 1];

    for(int j=0; j<=(n / 2); j++){

      dp[i][j] = dp[i - 1][j] + mx;
      if(j > 0) dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] - mn);

    }

  }

  int cur = n / 2;

  for(int i=n; i>=1; i--){

    int mn = x[i - 1][0], mx = x[i - 1][m - 1];

    if(cur == 0 || dp[i - 1][cur] + mx == dp[i][cur]){

      ans[i - 1][m - 1] = 0;

    } else{

      ans[i - 1][0] = 0;
      cur --;

    }

  }

	allocate_tickets(ans);

	return dp[n][n / 2];

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...