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

藍(lán)橋杯之“砝碼稱重“解題思路,含圖解(Java)

這篇具有很好參考價(jià)值的文章主要介紹了藍(lán)橋杯之“砝碼稱重“解題思路,含圖解(Java)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

問(wèn)題描述

你有一架天平和?N?個(gè)砝碼,這?N?個(gè)砝碼重量依次是?W_1, W_2, · · · , W_N。

請(qǐng)你計(jì)算一共可以稱出多少種不同的重量? 注意砝碼可以放在天平兩邊。

輸入格式

輸入的第一行包含一個(gè)整數(shù) N。

第二行包含 N?個(gè)整數(shù):W_1, W_2, W_3, · · · , W_N?。

輸出格式

輸出一個(gè)整數(shù)代表答案。

樣例輸入

3
1 4 6

樣例輸出

10

樣例說(shuō)明

能稱出的 10 種重量是:1、2、3、4、5、6、7、9、10、11

問(wèn)題分析:

首先分析問(wèn)題的類型,每一個(gè)砝碼只能選擇取或者不取,類似于01背包問(wèn)題。

每一種不同重量都可以從計(jì)算上次秤出的重量中上得出,這句話可能大家沒(méi)有太明白。

我這里解釋一下,比如說(shuō):

假設(shè)砝碼a,b,c的重量分別為1,4,6

一開(kāi)始,天平上只有砝碼a,天平上只有砝碼a說(shuō)明秤出的重量只有1。

此時(shí)我們可以不放砝碼b,或者放砝碼b

放入砝碼b就會(huì)秤出重量5和3,即4+1=5和4-1=3,我們可以把5和3作為新的砝碼,等放入下一個(gè)砝碼時(shí),就可以在原來(lái)秤出的重量上計(jì)算新的重量

不放入b,天平上還是原來(lái)的重量

算法圖解:

圖解一:分析先放入a,再放入b,在放入c的圖解

藍(lán)橋杯之“砝碼稱重“解題思路,含圖解(Java)

圖解二:分析不放入a,再放入b,再放入c的情況

藍(lán)橋杯之“砝碼稱重“解題思路,含圖解(Java)

以上的圖解只分析了兩種情況 ,所有需要畫(huà)出所有的情況,就會(huì)畫(huà)出一顆樹(shù)。

左子樹(shù)代表選擇放入新的砝碼,右子樹(shù)表示不放入新的砝碼,也就是繼承上次的重量。

注意:左子樹(shù)可能會(huì)秤出兩種重量

藍(lán)橋杯之“砝碼稱重“解題思路,含圖解(Java)

根據(jù)以上圖解我們可以得出,每次放入新的砝碼,都可以從上一次秤得的重量中計(jì)算得出。

完整代碼如下:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Set<Integer> set = new HashSet<>();
        int n = scan.nextInt();
        int[] fama = new int[n];
        for (int i = 0; i < n; i++) {
            fama[i] = scan.nextInt();
        }
        //初始化set,表示一開(kāi)始天平上沒(méi)有砝碼,重量為0
        set.add(0);
        for (int i = 0; i < n; i++) {
            //在沒(méi)放入新的砝碼前,將秤得的所有重量放入list集合中
            List<Integer> list = new ArrayList<>(set);
            for (int k : list) {
                //相加和相減取絕對(duì)值產(chǎn)生新的兩個(gè)重量,并加重量放入set集合中
                //注意:如果新秤得的重量在原來(lái)的set集合存在,將不被放入set中
                set.add(k + fama[i]);
                set.add(Math.abs(k - fama[i]));
            }
        }
        //移除0元素
        set.remove((Object)0);
        //輸出set集合大小,即秤得的重量數(shù)
        System.out.println(set.size());
    }
}

運(yùn)行結(jié)果:

藍(lán)橋杯之“砝碼稱重“解題思路,含圖解(Java)

?當(dāng)然了,本人也使用過(guò)遞歸爆搜的解法,由于利用暴力搜索的方法會(huì)產(chǎn)生大量的重復(fù)計(jì)算,

所以提交答案會(huì)提示超時(shí),代碼給有需要的讀者作為參考:

import java.util.*;
// 1:無(wú)需package
// 2: 類名必須Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Main main = new Main();
        Set<Integer> result = new HashSet<>();
        int n = scan.nextInt();
        int[] fama = new int[n];
        for(int i = 0; i < n; i++){
            fama[i] =  scan.nextInt();
        }
        main.rese(0,fama,0,0,n,result);
        System.out.println(result.size());
        scan.close();
    }

    public void rese(int a,int[] fama,int sum1, int sum2,int n,Set<Integer> result){
        if(sum1 - sum2 > 0){
            result.add(sum1 - sum2);
        }
        for(int i = a; i < n; i++){
            sum1 += fama[i];
            rese(i+1,fama,sum1,sum2,n,result);
            sum1 -= fama[i];
            sum2 += fama[i];
            rese(i+1,fama,sum1,sum2,n,result);
            sum2 -= fama[i];
        }
    }
}

?前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家

跳轉(zhuǎn)到教程

finally,如果讀者們可以理解我這個(gè)解法當(dāng)然我是最開(kāi)心的,雖然在表述上沒(méi)這么清晰吧,但是圖解是我的全部想法,這個(gè)解法也是我自己獨(dú)立想出來(lái)的,感謝您的閱讀!??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-405453.html

到了這里,關(guān)于藍(lán)橋杯之“砝碼稱重“解題思路,含圖解(Java)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 第十四屆藍(lán)橋杯大賽軟件賽省賽-試題 B---01 串的熵 解題思路+完整代碼

    歡迎訪問(wèn)個(gè)人網(wǎng)站來(lái)查看此文章:http://www.ghost-him.com/posts/db23c395/ 對(duì)于一個(gè)長(zhǎng)度為 n 的 01 串 S = x 1 x 2 x 3 . . . x n S = x_{1} x_{2} x_{3} ... x_{n} S = x 1 ? x 2 ? x 3 ? ... x n ? ,香農(nóng)信息熵的定義為 H ( S ) = ? ∑ 1 n p ( x i ) l o g 2 ( p ( x i ) ) H(S ) = ? {textstyle sum_{1}^{n}} p(x_{i})log_{2} (p

    2023年04月10日
    瀏覽(32)
  • 藍(lán)橋杯之貪心

    藍(lán)橋杯之貪心

    將股票價(jià)格的變動(dòng)抽象成折線圖,將每個(gè)上升階段累加起來(lái)(每次的累加并不一定代表真實(shí)的一次買(mǎi)賣(mài)交易,比如兩段連續(xù)上升的折線,只進(jìn)行了一次買(mǎi)賣(mài),但對(duì)兩段上升折線分別累加的收益結(jié)果是一致的) 我們?cè)O(shè)在倉(cāng)庫(kù)左邊的所有點(diǎn),到倉(cāng)庫(kù)的距離之和為p,右邊的距離之和

    2023年04月09日
    瀏覽(11)
  • 藍(lán)橋杯之我見(jiàn)

    藍(lán)橋杯之我見(jiàn)

    關(guān)于藍(lán)橋杯,應(yīng)該有很多人不知道這是一個(gè)什么樣的比賽。但是作為一名合格的程序員,就算之前沒(méi)有參加過(guò)藍(lán)橋杯的比賽,或者沒(méi)聽(tīng)說(shuō)過(guò)藍(lán)橋杯,讀完本篇文章再說(shuō)不知道藍(lán)橋杯,就有點(diǎn)不合適了吧?!那么本文就來(lái)簡(jiǎn)單聊一下關(guān)于藍(lán)橋杯相關(guān)的內(nèi)容,“掃盲科普”一下。

    2023年04月14日
    瀏覽(35)
  • 藍(lán)橋杯之找素?cái)?shù)(填空題+編程題)

    藍(lán)橋杯之找素?cái)?shù)(填空題+編程題)

    ?強(qiáng)烈推薦先看一下這篇藍(lán)橋杯之素?cái)?shù)及相關(guān)判斷方法(看這一篇就夠了)_冷兮雪的博客-CSDN博客 目錄 一、找素?cái)?shù)(填空題) ?1、題目 ?2、題目解讀 ?3、代碼 ?二、找素?cái)?shù)(編程題) 1、題目 2、題目解讀? ?3、代碼 找素?cái)?shù) - 藍(lán)橋云課 (lanqiao.cn) ?1、題目 題目描述 本題為填

    2023年04月18日
    瀏覽(19)
  • 藍(lán)橋杯之算法模板題 Python版

    藍(lán)橋杯之算法模板題 Python版

    記錄一下算法模板題,這樣方便查閱和學(xué)習(xí),希望好好加油 dp, LIS ** 01背包 動(dòng)態(tài)轉(zhuǎn)移方程 f [ i ] [ j ] = m a x ( f [ i ? 1 ] [ j ] , f [ i ? 1 ] [ j ? v ] + w ) ( j v ) f[i][j] = max(f[i-1][j], f[i-1][j-v] + w)(jv) f [ i ] [ j ] = m a x ( f [ i ? 1 ] [ j ] , f [ i ? 1 ] [ j ? v ] + w ) ( j v ) 完全背包 一般就是

    2023年04月08日
    瀏覽(23)
  • 藍(lán)橋杯之素?cái)?shù)及相關(guān)判斷方法(看這一篇就夠了)

    藍(lán)橋杯之素?cái)?shù)及相關(guān)判斷方法(看這一篇就夠了)

    目錄 一、素?cái)?shù)及相關(guān)概念 ?1、素?cái)?shù)的性質(zhì) ?2、有關(guān)素?cái)?shù)的猜想 ?二、素?cái)?shù)的判斷方法 ?1、根據(jù)性質(zhì)去判斷 ?2、改進(jìn)1方法(縮小比較范圍√n) 3、再次分析素?cái)?shù)的特點(diǎn),得出規(guī)律 問(wèn)題:枚舉n以內(nèi)所有素?cái)?shù) ?4、埃氏篩法(埃拉托斯特尼篩法) 5、歐拉篩法(埃氏篩法的優(yōu)化

    2023年04月15日
    瀏覽(20)
  • Frida主動(dòng)調(diào)用java函數(shù)來(lái)爆破解題思路

    利用Frida去調(diào)用java代碼中的類,然后爆破。算是一種主動(dòng)調(diào)用的方法。主動(dòng)調(diào)用可以用于爆破,模擬程序部分執(zhí)行,需要注意的知識(shí)點(diǎn)是在java代碼中的static類型數(shù)據(jù)在爆破過(guò)程中需要每次都對(duì)這種類型值重新設(shè)置。因?yàn)閟tatic類型在所有實(shí)例中都是統(tǒng)一,修改一個(gè)實(shí)例就會(huì)修改

    2024年02月13日
    瀏覽(31)
  • 華為OD機(jī)試真題B卷 Java 實(shí)現(xiàn)【尋找峰值】,附詳細(xì)解題思路

    華為OD機(jī)試真題B卷 Java 實(shí)現(xiàn)【尋找峰值】,附詳細(xì)解題思路

    給定一個(gè)長(zhǎng)度為n的數(shù)組nums,請(qǐng)你找到峰值并返回其索引。數(shù)組可能包含多個(gè)峰值,在這種情況下,返回任何一個(gè)所在位置即可。 1.峰值元素是指其值嚴(yán)格大于左右相鄰值的元素。嚴(yán)格大于即不能有等于; 2.假設(shè) nums[-1] = nums[n] = -infty?∞; 3.對(duì)于所有有效的 i 都有 nums[i] !=

    2024年02月06日
    瀏覽(52)
  • 華為OD機(jī)試真題B卷 Java 實(shí)現(xiàn)【字符統(tǒng)計(jì)】,附詳細(xì)解題思路

    華為OD機(jī)試真題B卷 Java 實(shí)現(xiàn)【字符統(tǒng)計(jì)】,附詳細(xì)解題思路

    華為OD機(jī)試 2023B卷題庫(kù)瘋狂收錄中,刷題 點(diǎn)這里 輸入一個(gè)只包含小寫(xiě)英文字母和數(shù)字的字符串,按照不同字符統(tǒng)計(jì)個(gè)數(shù)由多到少輸出統(tǒng)計(jì)結(jié)果,如果統(tǒng)計(jì)的個(gè)數(shù)相同,則按照ASCII碼由小到大排序輸出。 數(shù)據(jù)范圍:字符串長(zhǎng)度滿足 1≤len(str)≤1000 。 一個(gè)只包含小寫(xiě)英文字母和

    2024年02月07日
    瀏覽(97)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包