867. 四键键盘

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章