国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法題——華為OD機(jī)試——整數(shù)劃分排序/員工分月餅——動態(tài)規(guī)劃——Java

這篇具有很好參考價值的文章主要介紹了算法題——華為OD機(jī)試——整數(shù)劃分排序/員工分月餅——動態(tài)規(guī)劃——Java。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

簡介

一個考察動態(tài)規(guī)劃的機(jī)試題的數(shù)學(xué)模型建立,和兩種思路的取舍

題目

公司分月餅,m個員工,買了n個月餅,m <= n,每個員工至少分一個月餅,但是也可以分到多個,單人分到最多月餅的個數(shù)是Max1,單人分到第二多月餅個數(shù)是Max2。

但需要滿足Max1-Max2 <= 3,單人分到第n-1多月餅個數(shù)是Max(n-1),單人分到第n多月餅個數(shù)是Max(n), 想要滿足Max(n-1) - Max(n) <= 3,問有多少種分月餅的方法?

輸入描述:

每一行輸入m,n,表示m個員工,n個月餅,m <=n

輸出描述:

輸出有多少種分法

示例1:

輸入

2 4

輸出

2

說明

4=1+3

4=2+2

注意:1+3和3+1要算成同一種分法

示例2:

輸入

3 5

輸出

2

說明

5=1+1+3

5=1+2+3

示例3:

輸入

3 12

輸出

6

說明

滿足要求的6種分法:

1、12 = 1 + 1 + 10 (Max1=10, Max2=1,不滿足Max1-Max2 <= 3的約束)

2、12 = 1 + 2 + 9 (Max1=9,Max2=2,不滿足Max1-Max2 <= 3的約束)

3、12 = 1 + 3 + 8 (Max1=8,Max2=3,不滿足Max1-Max2 <= 3的約束)

4、12 = 1 + 4 + 7 (Max1=7,Max2=4,Max3=1, 滿足要求)

5、12 = 1 + 5 + 6 (Max1=6,Max2=5,Max3=1, 不滿足要求)

6、12 = 2 + 2 + 8 (Max1=8,Max2=2,不滿足要求)

7、12 = 2 + 3 + 7 (Max1=7,Max2=3,不滿足要求)

8、12 = 2 + 4 + 6 (Max1=6,Max2=4,Max3=2, 滿足要求)

9、12 = 2 + 5 + 5 (Max1=5,Max2=2 滿足要求)

10、12 = 3 + 3 + 6 (Max1=6,Max2=3 滿足要求)

11、12 = 3 + 4 + 5 (Max1=5,Max2=4,Max3=3 滿足要求)

12 = 4 + 4 + 4 (Max1=4,滿足要求)

平臺場景

??途W(wǎng) 可以選擇使用多種語言 我選擇Java寫的

大多數(shù)題目需要做輸入輸出訓(xùn)練

但是這題不用 給定了 形參 m員工 n月餅 最后return方案數(shù)量即可

數(shù)學(xué)模型

把正整數(shù)n分為m份自然數(shù),m <= n,排序后,任意相鄰數(shù)相差不超過3

方案1-動態(tài)規(guī)劃

思路代碼

* 這是動態(tài)規(guī)劃方案
* 定義狀態(tài) dp[i][j][k] 表示前 i 個人分配了 j 個月餅,且第 i 個人分配了 k 個月餅的方案數(shù)。
* 狀態(tài)方程為 dp[i][j]=∑k=1>>3? dp[i?1][j?k]
* 時空復(fù)雜度都是 m*n*n*n
    public static int countWays(int m, int n) {
        int[][][] dp = new int[m + 1][n + 1][n + 1];
        // 初始化
        for (int k = 1; k <= n ; k++) {
            dp[1][k][k] = 1; // 只有1個員工時,只有一種分法
        }
        // 動態(tài)規(guī)劃
        for (int i = 1; i <= m; i++) {
            for (int j = i; j <= n; j++) { // 確保月餅數(shù)量不少于員工數(shù)
                for (int k = 1; k <= j; k++) { // 每個員工至少分得1個月餅
                    for (int l = 1; l <= k; l++) { // 確保當(dāng)前分配不超過上一個員工的分配
                        dp[i][j][k] += dp[i - 1][j - k][l];
                    }
                }
            }
        }

        // 匯總結(jié)果
        int count = 0;
        for (int k = 0; k <= n; k++) {
            System.out.println("dp" + m + n + k + "  " + dp[m][n][k]);
            count += dp[m][n][k];
        }

        return count;
    }

評價總結(jié)

* 對特定問題(方案數(shù)量而不是具體方案)是簡單了,但實(shí)際上壓縮損失了很多信息
* 對方案數(shù)量的計算涉及到是否去重(可以通過 具體分配的是否遞增來表達(dá))
* 對于有需求變化的場景會加大開發(fā)難度

方案2

思路代碼

* 這是遞歸方案,遍歷所有樹枝
* 輸出所有方案具體劃分內(nèi)容
* 時間復(fù)雜度 n^m 空間復(fù)雜度 m+結(jié)果數(shù)量
    private static List<List<Integer>> partition(int n, int m) {
        List<List<Integer>> result = new ArrayList<>();
        partitionHelper(n, m, 0, new ArrayList<>(), result);
        return result;
    }

    private static void partitionHelper(int n, int m, int last, List<Integer> current, List<List<Integer>> result) {
        if (current.size() == m) {
            if (n == 0) {
                result.add(new ArrayList<>(current));
            }
            return;
        }

        int start = current.isEmpty() ? 1 : Math.max(current.get(current.size() - 1), 1);
        int end = current.isEmpty() ? n/m : Math.min(n, last + 3);
        for (int i = start; i <= end; i++) {
            current.add(i);
            partitionHelper(n - i, m, i, current, result);
            current.remove(current.size() - 1);
        }
    }



    public static void test() {
        List<List<Integer>> result = partition(4, 2);

        System.out.println(result.size());
        for (List<Integer> partition : result) {
            System.out.println(partition);
        }
    }

評價

不是最切合題意的高效方式,但是符合問題生長方向

過程可控,最后打印所有的方案內(nèi)容文章來源地址http://www.zghlxwxcb.cn/news/detail-840620.html

到了這里,關(guān)于算法題——華為OD機(jī)試——整數(shù)劃分排序/員工分月餅——動態(tài)規(guī)劃——Java的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 華為OD機(jī)試 - 員工派遣(Java & JS & Python & C)

    題目描述 某公司部門需要派遣員工去國外做項目。 現(xiàn)在,代號為 x 的國家和代號為 y 的國家分別需要 cntx 名和 cnty 名員工。 部門每個員工有一個員工號(1,2,3,......),工號連續(xù),從1開始。 部長派遣員工的規(guī)則: 規(guī)則1:從 [1, k] 中選擇員工派遣出去 規(guī)則2:編號為 x 的倍數(shù)

    2024年02月03日
    瀏覽(21)
  • 【華為OD機(jī)試真題 Python語言】445、員工派遣 | 機(jī)試真題+思路參考+代碼解析(C卷)

    ??個人博客首頁: KJ.JK ? ??專欄介紹: 華為OD機(jī)試真題匯總,定期更新華為OD各個時間階段的機(jī)試真題,每日定時更新,本專欄將使用Python語言進(jìn)行更新解答,包含真題,思路分析,代碼參考,歡迎大家訂閱學(xué)習(xí) ??題目描述 某公司部門需要派遣員工去國外做項目,現(xiàn)在,

    2024年02月02日
    瀏覽(25)
  • 【免費(fèi)題庫】華為OD機(jī)試 - 員工派遣(Java & JS & Python & C & C++)

    哈嘍,本題庫完全免費(fèi),收費(fèi)是為了防止被爬,大家訂閱專欄后可以私信聯(lián)系退款。感謝支持 某公司部門需要派遣員工去國外做項目。 現(xiàn)在,代號為 x 的國家和代號為 y 的國家分別需要 cntx 名和 cnty 名員工。 部門每個員工有一個員工號(1,2,3,…),工號連續(xù),從1開始。 部

    2024年04月12日
    瀏覽(30)
  • 171.【華為OD機(jī)試】尋找身高相近的小朋友(排序算法實(shí)現(xiàn)Java&Python&C++&JS)

    記得收藏本專欄頂置的華為OD機(jī)試指南寶典! ??你的旅程將在這里啟航!本專欄所有題目均包含優(yōu)質(zhì)解題思路,高質(zhì)量解題代碼,詳細(xì)代碼講解,助你深入學(xué)習(xí),深度掌握!

    2024年03月19日
    瀏覽(24)
  • 華為OD機(jī)試 - 字符串劃分(Java & JS & Python)

    題目描述 給定一個小寫字母組成的字符串?s,請找出字符串中兩個不同位置的字符作為分割點(diǎn),使得字符串分成三個連續(xù)子串且子串權(quán)重相等,注意子串不包含分割點(diǎn)。 若能找到滿足條件的兩個分割點(diǎn),請輸出這兩個分割點(diǎn)在字符串中的位置下標(biāo),若不能找到滿足條件的分

    2024年02月11日
    瀏覽(28)
  • 華為OD機(jī)試真題-找出兩個整數(shù)數(shù)組中同時出現(xiàn)的整數(shù)-2023年OD統(tǒng)一考試(B卷)

    題目描述: 現(xiàn)有兩個整數(shù)數(shù)組,需要你找出兩個數(shù)組中同時出現(xiàn)的整數(shù),并按照如下要求輸出: 1、有同時出現(xiàn)的整數(shù)時,先按照同時出現(xiàn)次數(shù)(整數(shù)在兩個數(shù)組中都出現(xiàn)并且出現(xiàn)次數(shù)較少的那個)進(jìn)行歸類,然后按照出現(xiàn)次數(shù)從小到大依次按行輸出。 2、沒有同時出現(xiàn)的整

    2024年02月07日
    瀏覽(87)
  • 華為OD機(jī)試 - 找出兩個整數(shù)數(shù)組中同時出現(xiàn)的整數(shù)(Java & JS & Python)

    題目描述 現(xiàn)有兩個整數(shù)數(shù)組,需要你找出兩個數(shù)組中同時出現(xiàn)的整數(shù),并按照如下要求輸出: 有同時出現(xiàn)的整數(shù)時,先按照同時出現(xiàn)次數(shù)(整數(shù)在兩個數(shù)組中都出現(xiàn)并目出現(xiàn)次數(shù)較少的那個)進(jìn)行歸類,然后按照出現(xiàn)次數(shù)從小到大依次按行輸出。 沒有同時出現(xiàn)的整數(shù)時,輸出

    2024年02月09日
    瀏覽(171)
  • 華為OD機(jī)試真題(Java),整數(shù)編碼(100%通過+復(fù)盤思路)

    華為OD機(jī)試真題(Java),整數(shù)編碼(100%通過+復(fù)盤思路)

    實(shí)現(xiàn)一個整數(shù)編碼方法,使得待編碼的數(shù)字越小,編碼后所占用的字節(jié)數(shù)越小。 編碼規(guī)則如下: 編碼時7位一組,每個字節(jié)的低7位用于存儲待編碼數(shù)字的補(bǔ)碼; 字節(jié)的最高位表示后續(xù)是否還有字節(jié),置1表示后面還有更多的字節(jié),置0表示當(dāng)前字節(jié)為最后一個字節(jié); 采用小端

    2024年02月01日
    瀏覽(91)
  • 【華為OD機(jī)試】1029 - 整數(shù)與IP地址間的轉(zhuǎn)換

    ??個人博客首頁: KJ.JK ? ??專欄介紹: 華為OD機(jī)試真題匯總,定期更新華為OD各個時間階段的機(jī)試真題,每日定時更新,本專欄將使用Python語言進(jìn)行更新解答,包含真題,思路分析,代碼參考,歡迎大家訂閱學(xué)習(xí)

    2023年04月20日
    瀏覽(16)
  • 【華為OD機(jī)試真題 JS語言】291、整數(shù)編碼 | 機(jī)試真題+思路參考+代碼分析

    ??個人博客首頁: KJ.JK ? ??專欄介紹: 華為OD機(jī)試真題匯總,定期更新華為OD各個時間階段的機(jī)試真題,每日定時更新,本專欄將使用JS語言進(jìn)行更新解答,包含真題,思路分析,代碼參考,歡迎大家訂閱學(xué)習(xí)

    2024年02月07日
    瀏覽(90)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包