題目描述: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];
}
};