LC 818. Race Car
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]; } };