Pagini recente » Cod sursa (job #652197) | Cod sursa (job #3277614) | Cod sursa (job #3287953) | Cod sursa (job #3175008) | Cod sursa (job #638940)
Cod sursa(job #638940)
//poater te gandesti si mai modifici pe la if-uri
using namespace std;
#include<iostream>
#include<fstream>
#include<cstring>
ofstream fout("palm.out");
char a[510];
int N;
struct nod{
int p,s;};
nod v[260100];
int dp[260100];
//int h[100],hi[100];
/*int maxi(char dummy,int p,int s)
{
int castu;
castu=(int)(dummy-'a');
int ans=0,i;
for(i=0;i<=castu;i++)
{
if(hi[i]==0 || (p>v[hi[i]].p && s<v[hi[i]].s) )
ans=max(ans,h[i]);
}
return ans;
}
void update(char dummy,int value,int i)
{
int castu;
castu=(int)(dummy-'a');
h[castu]=max(value,h[castu]);
if(h[castu]==value)
hi[castu]=i;
}*/
void scmax()
{
int ans=0;
int i,j;
//N=min(N,10000);
for(i=1;i<=N;i++)
{
dp[i]=0;
for(j=1;j<i;j++)
{
if(a[v[i].p]<a[v[j].p])
continue;
if(v[i].p<=v[j].p)
continue;
if(v[i].s<v[j].s)
dp[i]=max(dp[i],dp[j]);
}
dp[i]+=((v[i].p==v[i].s)?1:2);
ans=max(ans,dp[i]);
}
/* cout<<"\n";
for(i=0;i<=50;i++)
{
cout<<h[i]<<" ";
}
cout<<"\n";
for(i=0;i<=50;i++)
{
cout<<hi[i]<<" ";
}
cout<<"\n";*/
fout<<ans<<"\n";
}
void build()
{
int i,j,M=0;
for(i=1;i<=N;i++)
{
for(j=1;j<=N-i;j++)
{
if(a[i]==a[N-j+1])
{
v[++M].p=i;
v[M].s=N-j+1;
}
}
}
for(i=1;i<=N;i++)
{
v[++M].p=i;
v[M].s=i;
}
N=M;
/* for(i=1;i<=N;i++)
{
cout<<v[i].p<<" "<<v[i].s<<" "<<a[v[i].s]<<"\n";
}*/
}
void cit()
{
ifstream fin("palm.in");
fin.getline(a+1,505);
N=strlen(a+1);
fin.close();
}
int main()
{
cit();
build();
scmax();
fout.close();
return 0;
}