Submission #1337861

#TimeUsernameProblemLanguageResultExecution timeMemory
1337861JuanJLRastuci (COCI25_rastuci)C++20
25 / 110
10 ms9476 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#define fst first
#define snd second
#define pb push_back
#define mset(a,v) memset(a,v,sizeof(a))
#define forn(i,a,b) for(int i = a; i<b; i++)
#define SZ(x) (int)x.size()
#define ALL(x) x.begin(),x.end()

using namespace std;
using namespace __gnu_pbds;
typedef long long ll;

template <typename T>
using iset = tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>;

#ifdef D
	#define debug(x) cout<<x
#else
	#define debug(x) //nothing
#endif

const int MAXN = 105;


ll n;
ll v[MAXN];
ll ps[MAXN];
ll dp[MAXN][MAXN][MAXN];
ll f(ll i, ll j, ll k){
	ll &res = dp[i][j][k];
	if(res!=-1) return res;
	res=-1000000000;
	ll act = ps[i]-ps[j];
	ll ant = ps[j]-(k-1>=0?ps[k-1]:0);

	if(i==n){
		if(act>=ant) res=1;
		else res=-1000000000;
		//cout<<i<<" "<<j<<" "<<k<<" "<<act<<" "<<ant<<" "<<res<<'\n';
		return res;
	}

	
	//if(act>=ant) res=max(res,f(i+1,i,(j+1==i?j:j+1))+1);
	if(act>=ant) res=max(res,f(i+1,i,j+1)+1);
	res=max(res,f(i+1,j,k));

	//cout<<i<<" "<<j<<" "<<k<<" = "<<res<<'\n';
	return res;
}

vector<ll> recu;

void rec(ll i, ll j, ll k){
	ll res = f(i,j,k);

	ll act = ps[i]-ps[j];
	ll ant = ps[j]-(k-1>=0?ps[k-1]:0);

	//cout<<i<<" "<<j<<" "<<k<<"= "<<res<<'\n';

	if(i==n){
		if(act>=ant && res == 1) recu.pb(act);
		else recu.pb(-1000000000);
		return;
	}

	//if(act>=ant) res=max(res,f(i+1,i,(j+1==i?j:j+1))+1);
	if(act>=ant && res==f(i+1,i,j+1)+1) recu.pb(act), rec(i+1,i,j+1);
	else if(res==f(i+1,j,k)) rec(i+1,j,k);
}

int main(){
	cin>>n;
	
	forn(i,1,n+1) cin>>v[i], ps[i]=v[i];
	
	ps[0]=0;
	forn(i,2,n+1) ps[i]+=ps[i-1];

	debug("mset\n");
	mset(dp,-1);
	debug("hora de la dp\n");
	cout<<f(1,0,0)<<'\n';
	recu.clear();
	rec(1,0,0);
	for(auto i:recu) cout<<i<<" "; cout<<'\n';
	return 0;
}
#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...