#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S chmin( S & a, T b) {
if ( a> b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int N;
char S[ 1002 ] ;
int dp[ 1001 ] [ 1001 ] ;
int solve( int a, int b) {
int res = 1073709056 ;
if ( a>= b) {
return 0 ;
}
if ( dp[ a] [ b] >= 0 ) {
return dp[ a] [ b] ;
}
if ( S[ a] == S[ b] ) {
chmin( res, solve( a+ 1 , b- 1 ) ) ;
}
chmin( res, solve( a+ 1 , b) + 1 ) ;
chmin( res, solve( a, b- 1 ) + 1 ) ;
return dp[ a] [ b] = res;
}
class Solution{
public :
bool isValidPalindrome( string s, int k) {
int i;
int res;
N = s.size ( ) ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
S[ i] = s[ i] ;
}
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
int j;
for ( j= ( 0 ) ; j< ( N) ; j++ ) {
dp[ i] [ j] = - 1 ;
}
}
res = solve( 0 , N- 1 ) ;
return res <= k;
}
}
;
// cLay varsion 20191006-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int N;
// char S[1002];
// int dp[1001][1001];
//
// int solve(int a, int b){
// int res = int_inf;
//
// if(a>=b) return 0;
// if(dp[a][b] >= 0) return dp[a][b];
//
// if(S[a]==S[b]) res <?= solve(a+1, b-1);
// res <?= solve(a+1, b) + 1;
// res <?= solve(a, b-1) + 1;
// return dp[a][b] = res;
// }
//
// class Solution {
// public:
// bool isValidPalindrome(string s, int k) {
// int res;
// N = s.size();
// rep(i,N) S[i] = s[i];
// rep(i,N) rep(j,N) dp[i][j] = -1;
// res = solve(0, N-1);
// return res <= k;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIGNobWluKFMgJmEsIFQgYil7CiAgaWYoYT5iKXsKICAgIGE9YjsKICB9CiAgcmV0dXJuIGE7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgppbnQgTjsKY2hhciBTWzEwMDJdOwppbnQgZHBbMTAwMV1bMTAwMV07CmludCBzb2x2ZShpbnQgYSwgaW50IGIpewogIGludCByZXMgPSAxMDczNzA5MDU2OwogIGlmKGE+PWIpewogICAgcmV0dXJuIDA7CiAgfQogIGlmKGRwW2FdW2JdID49IDApewogICAgcmV0dXJuIGRwW2FdW2JdOwogIH0KICBpZihTW2FdPT1TW2JdKXsKICAgIGNobWluKHJlcywgc29sdmUoYSsxLCBiLTEpKTsKICB9CiAgY2htaW4ocmVzLCBzb2x2ZShhKzEsIGIpICsgMSk7CiAgY2htaW4ocmVzLCBzb2x2ZShhLCBiLTEpICsgMSk7CiAgcmV0dXJuIGRwW2FdW2JdID0gcmVzOwp9CmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBib29sIGlzVmFsaWRQYWxpbmRyb21lKHN0cmluZyBzLCBpbnQgayl7CiAgICBpbnQgaTsKICAgIGludCByZXM7CiAgICBOID0gcy5zaXplKCk7CiAgICBmb3IoaT0oMCk7aTwoTik7aSsrKXsKICAgICAgU1tpXSA9IHNbaV07CiAgICB9CiAgICBmb3IoaT0oMCk7aTwoTik7aSsrKXsKICAgICAgaW50IGo7CiAgICAgIGZvcihqPSgwKTtqPChOKTtqKyspewogICAgICAgIGRwW2ldW2pdID0gLTE7CiAgICAgIH0KICAgIH0KICAgIHJlcyA9IHNvbHZlKDAsIE4tMSk7CiAgICByZXR1cm4gcmVzIDw9IGs7CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMTkxMDA2LTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gaW50IE47Ci8vIGNoYXIgU1sxMDAyXTsKLy8gaW50IGRwWzEwMDFdWzEwMDFdOwovLyAKLy8gaW50IHNvbHZlKGludCBhLCBpbnQgYil7Ci8vICAgaW50IHJlcyA9IGludF9pbmY7Ci8vICAgCi8vICAgaWYoYT49YikgcmV0dXJuIDA7Ci8vICAgaWYoZHBbYV1bYl0gPj0gMCkgcmV0dXJuIGRwW2FdW2JdOwovLyAKLy8gICBpZihTW2FdPT1TW2JdKSByZXMgPD89IHNvbHZlKGErMSwgYi0xKTsKLy8gICByZXMgPD89IHNvbHZlKGErMSwgYikgKyAxOwovLyAgIHJlcyA8Pz0gc29sdmUoYSwgYi0xKSArIDE7Ci8vICAgcmV0dXJuIGRwW2FdW2JdID0gcmVzOwovLyB9Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBib29sIGlzVmFsaWRQYWxpbmRyb21lKHN0cmluZyBzLCBpbnQgaykgewovLyAgICAgaW50IHJlczsKLy8gICAgIE4gPSBzLnNpemUoKTsKLy8gICAgIHJlcChpLE4pIFNbaV0gPSBzW2ldOwovLyAgICAgcmVwKGksTikgcmVwKGosTikgZHBbaV1bal0gPSAtMTsKLy8gICAgIHJlcyA9IHNvbHZlKDAsIE4tMSk7Ci8vICAgICByZXR1cm4gcmVzIDw9IGs7Ci8vICAgfQovLyB9Owo=