LeetCode 343.整数拆分

一,问题描述

LeetCode 343.整数拆分_第1张图片

二,问题分析

给定整数n,拆分成至少两个整数和,注意至少两个,可以是三个甚至是多个

将问题分解

dp[i] : 表示整数 i 拆分后得到的最大值

dp[2] :2可以分解成1+1,结果是1*1=1

dp[3] :3可以分解成1+2,结果是1*2=2

dp[4] :4可以分解成1+3或者2+2,其中1*3=3,而若3继续分解的最大值就是dp[3],显然 3>dp[3]的,故无需分解

           同理2*2=4,2继续分解的最大值dp[2]只有1,2是大于dp[2]的,取2*2=4

           再从两种情况下取较大值

状态转移方程如下:dp[i] = max( dp[i] ,  max( j*(i-j) ,j*dp[i-j] )

三,问题解答

class Solution {
public:
    int integerBreak(int n) {
        if(n==2){
            return 1;
        }
        if(n==3){
            return 2;
        }
        vector dp(n+1,0);    //多开辟一个空间是为了使得下标i记录的就是整数i的值
        dp[2] = 1;
        dp[3] = 2;
        for(int i=4;i

 

你可能感兴趣的:(LeetCode刷题,动态规划)