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];
    }
};

 

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