Cod sursa(job #214755)

Utilizator gigi_becaliGigi Becali gigi_becali Data 15 octombrie 2008 20:29:13
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
using namespace std;
#include <iostream>
#include <fstream>
#define N 100001

int a[N], dp[N],t[N], n;
// dp = dynamic programing
// dp = lungimea celui mai lung subsir care se termina pe pozitia i
void read()
{
	ifstream f("scmax.in");
	ofstream g("scmax.out");
	
	f>>n;
	for(int i=1;i<=n;++i) f>>a[i];
	
}

void solve()
{
	ofstream g("scmax.out");
	
	int i, j;
	
	for(i=n-1; i>=1 ; --i)
		for(j=i+1; j<=n; ++j)
			if(a[i] < a[j])
				if(dp[i] < dp[j]+1)
					dp[i]=dp[j]+1, t[i]=j;
	
	int sol=0,pz=0;
	
	for(i=1;i<=n;++i)
		if(sol < dp[i]) sol=dp[i], pz=i;
	
	g<<sol+1<<"\n";
	for(i=pz; i ; i=t[i])
		g<<a[i]<<" ";
	g<<"\n";
}

int main()
{
	read();
	solve();
	
	return 0;
}