Pagini recente » Cod sursa (job #428287) | Cod sursa (job #1923576) | Cod sursa (job #3168326) | Cod sursa (job #1491599) | Cod sursa (job #790086)
Cod sursa(job #790086)
#include<stdio.h>
#include<string.h>
char v[2011];
short q,w,m,p,u,sol[2011],ll,a[2011][2011],r[12][2011],l[12][2011],i,j,n,c;
int main(){
v[0]=' ';
FILE *f=fopen("elimin2.in","r");
fscanf(f,"%s",v+1);
n=strlen(v);n--;
fclose(f);
for(i=0;i<=9;i++){
for(j=1;j<=n;j++){
if(i == v[j] - 48)
r[i][j] = j;
else
r[i][j]=r[i][j-1];
}
}
for(i=0;i<=9;i++){
for(j=n;j>=1;j--){
if(i == v[j] - 48)
l[i][j] = j;
else
l[i][j]=l[i][j+1];
}
}
for(i=1;i<=n;i++)
a[i][i]=1;
for(ll=2;ll<=n;ll++){
for(i=1;i+ll-1<=n;i++){
j=i+ll-1;
q=a[i+1][j];
w=a[i][j-1];
//a[i][j] = max(a[i+1][j],a[i][j-1]);
if(q>w)a[i][j]=q;
else a[i][j]=w;
c=v[i]-48;
if(i<=r[c][j] - 1){
//a[i][j] = max(a[i][j], a[i+1][r[c][j]-1] + 2);
q=a[i+1][r[c][j]-1] + 2;
if(a[i][j] < q)a[i][j]=q;
}
c=v[j]-48;
if(l[c][i] <= j-1){
//a[i][j] = max(a[i][j], a[l[c][i]+1][j-1] + 2);
q=a[l[c][i]+1][j-1] + 2;
if(a[i][j] < q) a[i][j]=q;
}
}
}
int X=a[1][n];
int x=1,y=n;
if(X % 2 == 0) m=X>>1;
else m=(X>>1) + 1;
p=0;u=X+1;
for(i=1;i<=m;i++){
for(c=9;c>=0;c--){
if(a[ l[c][x] ][ r[c][y] ] == X ){
p++; sol[p]=c;
u--; sol[u]=c;
x=l[c][x]+1;
y=r[c][y]-1;
X-=2;
break;
}
}
}
p=1;
u=a[1][n];
while(!sol[p]){
p++;
u--;
}
FILE *g=fopen("elimin2.out","w");
for(i=p;i<=u;i++)
fprintf(g,"%d",sol[i]);
fclose(g);
return 0;
}