Untitled
unknown
plain_text
a year ago
1.0 kB
3
Indexable
//12458 - Writing APP
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define max 1002
int memo[max][max][22];
bool can_palindrome(char*s, int left, int right, int k)
{
    if(k < 0)
        return false;//important
    
    if(left >= right)//don't forget '='
        return true;
    if(memo[left][right][k] != -1)
        return memo[left][right][k];
    if(s[left] == s[right])
        memo[left][right][k] = can_palindrome(s, left+1, right-1, k);
    else
        memo[left][right][k] = can_palindrome(s, left+1, right, k-1) ||
                               can_palindrome(s, left, right-1, k-1);//k remember to -1
                               
    return memo[left][right][k];
}
int main(void)
{
    int n, k;
    char str[max];
    memset(memo, -1, sizeof(memo));
    scanf("%d %d", &n, &k);
    scanf("%s", &str);
    if(can_palindrome(str, 0, n-1, k))
        printf("Yes\n");
    else
        printf("No\n");
    return 0;
}
Editor is loading...
Leave a Comment