Pagini recente » Cod sursa (job #61346) | Cod sursa (job #124043) | Cod sursa (job #1025372) | Cod sursa (job #620247) | Cod sursa (job #245630)
Cod sursa(job #245630)
#include<stdio.h>
#include<string.h>
char v[2011];
short m,p,u,sol[2011],ll,a[2011][2011],r[12][2011],l[12][2011],i,j,n,c;
int max(int a,int b){
if(b>a) return b;
return a;
}
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++){
r[i][j]=r[i][j-1];
if(i == v[j] - 48)
r[i][j] = j;
}
}
for(i=0;i<=9;i++){
for(j=n;j>=1;j--){
l[i][j]=l[i][j+1];
if(i == v[j] - 48)
l[i][j] = j;
}
}
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;
a[i][j] = max(a[i+1][j],a[i][j-1]);
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);
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);
}
}
int X=a[1][n];
int x=1,y=n;
if(X % 2 == 0) m=X/2;
else m=X/2 + 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;
}