Submission #428444

#TimeUsernameProblemLanguageResultExecution timeMemory
428444alishahali1382카니발 티켓 (IOI20_tickets)C++14
27 / 100
673 ms107620 KiB
#include "tickets.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O2")
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
#define debug(x) {cerr<<#x<<"="<<x<<"\n";}
#define debug2(x, y) {cerr<<"{"<<#x<<", "<<#y<<"}={"<<x<<", "<<y<<"}\n";}
#define debugp(p) {cerr<<#p<<"={"<<p.first<<", "<<p.second<<"}\n";}
#define debugv(abcd) {cerr<<#abcd<<": "; for (auto dcba:abcd) cerr<<dcba<<", ";cerr<<"\n";}
#define pb push_back()
#define all(x) x.begin(), x.end()
#define SZ(x) ((int)x.size())

const int inf=1000000100; // 1e9
const ll INF=10000000001000000; // 1e16
const int mod=1000000007;
const int MAXN=1510, LOG=20;

int n, m, k, x, y, u, v, t, a, b, ans;
int A[MAXN][MAXN];
ll ps[MAXN][MAXN];
ll dp[MAXN][MAXN];
int par[MAXN][MAXN];
vector<vi> out;

inline bool upd(ll &x, ll y){
	if (x>=y) return 0;
	x=y;
	return 1;
}

ll find_maximum(int _k, vector<vi> _A) {
	n=SZ(_A);
	m=SZ(_A[0]);
	k=_k;
	for (int i=1; i<=n; i++){
		for (int j=1; j<=m; j++) A[i][j]=_A[i-1][j-1];
		for (int j=1; j<=m; j++) ps[i][j]=ps[i-1][j] + A[i][j];
	}
	out.resize(n, vector<int>(m, -1));
	assert(k==1);
	memset(dp, -63, sizeof(dp));
	dp[0][0]=0;
	for (int i=1; i<=n; i++){
		for (int j=0; j<=i; j++){
			if (upd(dp[i][j], dp[i-1][j]-A[i][1])) par[i][j]=j;
			if (j && upd(dp[i][j], dp[i-1][j-1]+A[i][m])) par[i][j]=j-1;
		}
	}
	ll res=dp[n][n/2];
	debug(res)
	int j=n/2;
	for (int i=n; i; i--){
		if (par[i][j]==j-1) out[i-1][m-1]=0;
		else out[i-1][0]=0;
		j=par[i][j];
	}
	allocate_tickets(out);
	return res;
}
#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...