Pagini recente » Cod sursa (job #625141) | Cod sursa (job #1249350) | Cod sursa (job #379347) | Cod sursa (job #2043518) | Cod sursa (job #2798404)
#include <bits/stdc++.h>
using namespace std;
ifstream r("pscpld.in");
ofstream w("pscpld.out");
int solve(string str, int n)
{
int d[n][n];
memset(d, 0, sizeof(d));
bool p[n][n];
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;
}