日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

剪繩子

給你一根長(zhǎng)度為n的繩子,請(qǐng)把繩子剪成整數(shù)長(zhǎng)的m段(m、n都是整數(shù),n>1并且m>1,m<=n),每段繩子的長(zhǎng)度記為k[1],...k[m]。請(qǐng)問(wèn)k[1]*...*k[m]可能的最大乘積是多少?

例如,當(dāng)繩子的長(zhǎng)度為8時(shí),我們把它剪成長(zhǎng)度分別為2、3、3的三段,此時(shí)得到的最大乘積是18.

貪心法

    public int cutRope(int target){
        //4     2*2
        //5     2*3
        //6     3*3
        //7     2*2*3   4*3
        //8     2*3*3
        //9     3*3*3
        //10    2*2*3*3 4*3*3
        //11    2*3*3*3
        //由以上舉的例子可以看出,最后情況只可能為2或3
        //由3(n-3)>=2(n-2),可知當(dāng)n=5時(shí),等式相等,當(dāng)n>5時(shí),應(yīng)讓3盡量的多。
        if(target<2){
            return 0;
        }
        if(target==2){
            //由題目知m>1,所以2為1*1=1
            return 1;
        }
        if(target==3){
            //m>1,所以3為2*1=1
            return 2;
        }
        if(target%3==0){
            //當(dāng)繩子長(zhǎng)剛好為3的倍數(shù),則結(jié)果為3的(target/3)次冪
            return (int)Math.pow(3,target/3);
        }else if(target%3==1){
            //當(dāng)繩子長(zhǎng)對(duì)3取余剛好等于1時(shí),可以多留出一個(gè)3,結(jié)果就為3的(target/3-1)次冪乘以4
            return 4*(int)Math.pow(3,target/3-1);
        }else{
            //當(dāng)繩子長(zhǎng)對(duì)3取余剛好等于2時(shí),留出2,結(jié)果就為3的(target/3)次冪乘以2
            return 2*(int)Math.pow(3,target/3);
        }
    }
    public static void main(String[] args) {
        System.out.println(cutRope(8));//18
        System.out.println(cutRope(9));//27
    }

動(dòng)態(tài)規(guī)劃法

    //一個(gè)比較簡(jiǎn)單的動(dòng)態(tài)規(guī)劃
    //求問(wèn)題最優(yōu)解,該問(wèn)題可以分成若干個(gè)子問(wèn)題,子問(wèn)題之間還有重疊的更小的子問(wèn)題,考慮使用動(dòng)態(tài)規(guī)劃。
    //以自上而下分析,在長(zhǎng)度為n的繩子剪下乘積為f(n),剪下i長(zhǎng)度后,還剩n-i,即得公式
    //f(n)=max(f(i)*f(n-i))
    //為了避免重復(fù)計(jì)算子問(wèn)題,以從下往上的順序計(jì)算小問(wèn)題的解并保存下來(lái),在以此為基礎(chǔ)求解更大問(wèn)題。
    //每
    public int cutRope(int target){
        if(target<2){
            return 0;
        }
        if(target==2){
            return 1;
        }
        if(target==3){
            return 2;
        }
        int []dp=new int[target+1];
        dp[1]=1;
        dp[2]=2;
        dp[3]=3;//1 2 3 都是不剪繩子,得到的乘積最大
        int res=0;//記錄每次剪完的最大值
        for (int i=4;i<=target;i++){
            for (int j=1;j<=i/2;j++){//要計(jì)算j*i-j的最大值,所以只用計(jì)算j<=i的值
                res=Math.max(res,dp[j]*dp[i-j]);//得到長(zhǎng)度為i時(shí),所有剪法的最大值
            }
            dp[i]=res;//得到當(dāng)前剪法的最大值,保存到dp數(shù)組中
        }
        return dp[target];//返回最大值
    }
    public static void main(String[] args) {
        System.out.println(cutRope(8));//18
        System.out.println(cutRope(9));//27
    }

分享到:
標(biāo)簽:算法
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定