那么可能你的方程是这样写的:
dp[i] = max(dp[i],dp[j]+calc(i,j));
正确的方程是这样:
if(calc(i,j)) dp[i] = max(dp[i],dp[j]+1);
区别在于没有理解到,如果calc(i,j)为0,则根本不能基于j转移到i。
这里是想当然出错了。