1. 程式人生 > >POJ 1159(dp+備忘錄)

POJ 1159(dp+備忘錄)

不用short會引起記憶體超限,
不用備忘錄方法會引起TLE
但基本思路還是如下:
遞迴求解。
也可以用動態規劃演算法,但我看了半天還是不好理解,都說的不是特別好,要是有哪位大牛有好的思路希望在評論區給予我幫助,感激不盡。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>

using namespace std;

char s[5005];
short int dp[5005][5005];

int c(int
i,int j) { if(dp[i][j]!=-1) return dp[i][j]; if(i>=j) return dp[i][j]=0; else if(s[i]==s[j]) return dp[i][j]=c(i+1,j-1); else return dp[i][j]=min(c(i+1,j),c(i,j-1))+1; } int main() { int n; memset(dp,-1,sizeof(dp)); scanf("%d%s",&n,s); int
cnt=c(0,n-1); cout<<cnt<<endl; return 0; }