Pagini recente » Cod sursa (job #1239566) | Cod sursa (job #1410128) | Cod sursa (job #2173341) | Cod sursa (job #3149881) | Cod sursa (job #2798413)
#include <bits/stdc++.h>
using namespace std;
ifstream r("pscpld.in");
ofstream w("pscpld.out");
int solve(string str, int n)
{
int d[n+3][n+3];
memset(d, 0, sizeof(d));
bool p[n+3][n+3];
memset(p, false, sizeof(p));
for (int i=0;i<n;i++){
p[i][i]=true;
}
for(int i=0;i<n-1;i++){
if(str[i]==str[i+1]){
p[i][i+1]=true;
d[i][i+1]=1;
}
}
for (int gap=2;gap<n;gap++) {
for (int i=0;i<n-gap;i++) {
int j=gap+i;
if (str[i] == str[j] && p[i + 1][j - 1]==true){
p[i][j]=true;
}
if (p[i][j]==true){
d[i][j]=d[i][j - 1]+d[i + 1][j]+1-d[i + 1][j - 1];
}
else{
d[i][j]=d[i][j - 1]+d[i + 1][j]-d[i + 1][j - 1];
}
}
}
return d[0][n - 1];
}
int main()
{
string s;
r>>s;
int n=s.size();
w<<solve(s,n)+n<<"\n";
return 0;
}