RT,用类似记搜的形式写的。
有以下两份代码:
int dfs(int l,int r)
{
if(dp[l][r]!=-INF) return dp[l][r];
for (int i=l;i<r;i++){
int a=dfs(l,i),b=dfs(i+1,r);
if(a==b&&a!=0){
dp[l][r]=max(dp[l][r],dp[l][i]+1);
ans=max(ans,dp[l][i]+1);
}
}
return dp[l][r];
}
和
int dfs(int l,int r)
{
//cout<<l<<" "<<r<<" "<<dp[l][r]<<endl;
if(dp[l][r]!=-INF) return dp[l][r];
int ans=0;
for (int i=l;i<r;i++){
int a=dfs(l,i),b=dfs(i+1,r);
if(a==b&&a!=0){
ans=max(ans,dp[l][i]+1);
}
}
return dp[l][r]=ans;
}
感觉两者之间无非是第一份直接更新dp数组,并无太大差异。
可实际上,第一份8TLE 1WA,第二份AC。
WA的那个点我也不太理解,看讨论区里有说要特判0,我也有特判掉。
想问一下二者有什么区别吗。