Cod sursa(job #260849)

Utilizator cvicentiuCiorbaru Vicentiu Marian cvicentiu Data 17 februarie 2009 16:51:09
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
FILE *f =fopen ("scmax.in","r");
FILE *g =fopen ("scmax.out","w");
int n,v[100001],best[100001],max,pred[100001],sub;
void subsir(int start){
	if (start!=0){
	subsir(pred[start]);
	fprintf(g,"%d ",v[start]);
	}
}
int main(){
	//citire
	fscanf(f,"%d",&n);
	for (int i=1;i<=n;i++)
		fscanf(f,"%d",&v[i]);
	
	//programarea dinamica
	for (int i=1;i<=n;i++){
		max=0;
		for (int j=1;j<=i-1;j++){
			if (v[j]<v[i] && best[j]>max){
				max=j;
				pred[i]=j;
			}
		}
		best[i]=best[max]+1;
	}
	max=0;
	for (int i=1;i<=n;i++){
		if (max<best[i]) {max=best[i];
						sub=i;
		}
	}
	fprintf(g,"%d\n",max);
	/*for (int i=1;i<=n;i++)
		printf("%d ",pred[i]);*/
	subsir(sub);
		
}