Pagini recente » Cod sursa (job #1473331) | Cod sursa (job #792285) | Cod sursa (job #2002230) | Cod sursa (job #2424645) | Cod sursa (job #1761620)
#include <bits/stdc++.h>
using namespace std;
string s;
int dp[502][502][27];
int main() {
ifstream fin("palm.in");
ofstream fout("palm.out");
fin >> s;
for(int i = 0; i < s.size(); ++i)
s[i] -= 'a';
for(int c = 25; c >= 0; --c) {
for(int i = 0; i < s.size(); ++i)
if(s[i] == c)
dp[i][i][c] = 1;
if(c != 25) {
for(int i = 0; i < s.size(); ++i)
for(int j = i; j < s.size(); ++j)
dp[i][j][c] = max(dp[i][j][c], dp[i][j][c + 1]);
}
for(int l = 2; l <= s.size(); ++l) {
for(int i = 0; i + l - 1 < s.size(); ++i) {
int j = i + l - 1;
bool ok1 = s[i] < c, ok2 = s[i] < c;
if(ok1 || ok2) {
dp[i][j][c] = dp[i + ok1][j - ok2][c];
}
else if(s[i] == s[j]) {
dp[i][j][c] = 2 + dp[i + 1][j - 1][max({c, (int)s[i], (int)s[j]})];
}
dp[i][j][c] = max({dp[i][j][c], dp[i + 1][j][c], dp[i][j - 1][c]});
}
}
}
fout << dp[0][s.size() - 1][0];
return 0;
}