题目描述:https://www.lintcode.com/problem/4-keys-keyboard/description
借鉴了2keyboard的思路,N次操作最少能打出N个A,且如果最后的一组操作是acv(vvv...)打出的A的个数比干敲多之后,先用acv再干敲肯定是不划算的(因为如果把干敲放在acv前面,打出来的肯定更多)。那么我们要考虑的就是最后一个acvvvv....,v多少次是最优解。如果只v一次,res[N]=res[N-3]*2(留出3次操作acv,v了一次,加上已有的res[N-3],是2*res[N-3]);如果v两次,res[N]=res[N-4]*3(acvv,复制两次加已有的一组,一共四组)....以此类推找到最优解。
class Solution {
public:
int maxA(int N) {
vector<int> res(N+1,0);
for (int i=1;i<=N;i++)
{
res[i]=i;
for (int j=i-3;j>=1;j--)
res[i]=max(res[i],res[j]*(i-j-1));
}
return res[N];
}
};