Pagini recente » Monitorul de evaluare | Profil M@2Te4i | Rating David Moiceanu (DavidMoiceanu) | Cod sursa (job #771543) | Cod sursa (job #1761625)
#include <bits/stdc++.h>
using namespace std;
string s;
int dp[501][501];
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] = 1;
for(int l = 1; l < s.size(); ++l) {
for(int i = 0; i + l < s.size(); ++i) {
int j = i + l;
if(s[i] == s[j] && s[i] == c)
dp[i][j] = max(dp[i][j], 2 + dp[i + 1][j - 1]);
dp[i][j] = max(dp[i][j], dp[i + 1][j]);
dp[i][j] = max(dp[i][j], dp[i][j - 1]);
}
}
}
fout << dp[0][s.size() - 1];
return 0;
}