LC 818. Race Car

link

class Solution {
public:
    int racecar(int target) {
        vector<int> dp(target+1);
        for(int i=1;i<=target;i++){
            dp[i]=INT_MAX;
            int j=1;
            int m=1;    // 先向前走m步
            for(;j<i;j=(1<<++m)-1){
                int k=0;
                int n=0;
                for(;k<j;k=(1<<++n)-1){
                    dp[i]=min(dp[i],m+1+n+1+dp[i-(j-k)]); //再向后走n步
                }
            }
            if(j==i) dp[i]=min(dp[i],m);
            else {
                for(;j<2*i;j=(1<<++m)-1){
                    dp[i]=min(dp[i],m+1+dp[j-i]);  //过target后往后走
                }
            }
        }
        return dp[target];
    }
};

猜你喜欢

转载自www.cnblogs.com/FEIIEF/p/12810112.html
car
今日推荐