来源 http://leetcode.com/2011/01/ctrla-ctrlc-ctrlv.html
原题的思路不好理解,可以考虑使用动态规划。
max[i]=max[i-1]+1 or (max[k]*(i-k-3)+max[k]) where k is from 0 to i-3
代码:
vector<long> ff(100,0);
void dp(int n)
{
for(int i=1; i<=n; i++)
{
ff[i] = max(ff[i], ff[i-1]+1); // press a
for(int j = 0; j<=i-3; j++)
{
ff[i] = max(ff[j]*(i-j-2), ff[i]);
}
}
}