1159:Palindrome
問題文
http://poj.org/problem?id=1159
与えられた文字列を、文字を挿入する操作のみを行って回文にする。挿入する文字の最小個数を求めよ。
↓と同じ。メモ化再帰。int型を使うとMLEする。
http://d.hatena.ne.jp/TobiasGSmollett/20130702/1372785990
#include<iostream> #include<algorithm> #include<string> #define INF (1<<13) using namespace std; short memo[5001][5001]; string s; short rec(int i,int j){ if(memo[i][j]<INF)return memo[i][j]; if(i>=j)return 0; short res=INF; if(s[i]==s[j])res=min(res,rec(i+1,j-1)); else res=min(rec(i+1,j),rec(i,j-1))+1; return memo[i][j]=res; } int main(void){ int n; cin >> n >> s; fill(memo[0],memo[5001],INF); cout << rec(0,s.size()-1) << endl; return 0; }