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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值