ブラッシングノート(14)-ロープを切る

ブラッシングノート(14)-ロープを切る

タイトルの説明

長さnのロープを渡してください。ロープをmの長さの整数の長さにカットしてください(mおよびnは整数、n> 1およびm> 1)。各ロープの長さはk [0]、k [1]、...、k [m]。k [0] xk [1] x ... xk [m]の可能な最大積は何ですか?たとえば、ロープの長さが8の場合、ロープをそれぞれ長さ2、3、3の3つのセクションにカットします。このとき得られる最大の積は18です。

例1

入力

コピーする

8

アウトプット

コピーする

18

アイデア:質問の分割数に制限はなく、直感的に不規則に見えます。1、2、3、4は結果を直接取得できるため、次の点を考慮します。

4は1、3、2、2にのみ分割できるため、明らかに2 * 2の方が大きいため、後で遭遇する4を直接2、2に分割できます。

5:1、2、2;2、3

6:1.5(5が次いで、上記のように分解); 2,2,2; 3,3 ;

7:1,6(6次に、上記のように分解); 2.5(その後5上によれば分解)、3.2.2

……

2、3に分かれています

それが3の倍数である場合、それらはすべて3に直接分割されて、3の一定の累乗が得られます。

3の倍数でない場合は、まず3の倍数と余りの部分に分割して、3の累乗*余り(2または1)を取得します。

class Solution {
public:
    int cutRope(int number) {
        if(number==1)return 1;
        else if(number==2) return 1;
        else if(number==3)return 2;
        else if(number==4)return 4;
        else
        {
            if(number%3==0)
            {
                int x=number/3;
                return pow(3,x);
            }
            else
            {
                int x=number/3;
                int y=number%3;
                return pow(3,x)*y;
            }
        }
    }
};

 

36件の元の記事を公開 19件の賞賛 20,000回以上の閲覧

おすすめ

転載: blog.csdn.net/GJ_007/article/details/105470419