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

Day39 代碼隨想錄(1刷) 動(dòng)態(tài)規(guī)劃 0-1背包

這篇具有很好參考價(jià)值的文章主要介紹了Day39 代碼隨想錄(1刷) 動(dòng)態(tài)規(guī)劃 0-1背包。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

46. 攜帶研究材料(第六期模擬筆試)

題目描述

小明是一位科學(xué)家,他需要參加一場(chǎng)重要的國(guó)際科學(xué)大會(huì),以展示自己的最新研究成果。他需要帶一些研究材料,但是他的行李箱空間有限。這些研究材料包括實(shí)驗(yàn)設(shè)備、文獻(xiàn)資料和實(shí)驗(yàn)樣本等等,它們各自占據(jù)不同的空間,并且具有不同的價(jià)值。?

小明的行李空間為 N,問小明應(yīng)該如何抉擇,才能攜帶最大價(jià)值的研究材料,每種研究材料只能選擇一次,并且只有選與不選兩種選擇,不能進(jìn)行切割。

輸入描述

第一行包含兩個(gè)正整數(shù),第一個(gè)整數(shù) M 代表研究材料的種類,第二個(gè)正整數(shù) N,代表小明的行李空間。

第二行包含 M 個(gè)正整數(shù),代表每種研究材料的所占空間。?

第三行包含 M 個(gè)正整數(shù),代表每種研究材料的價(jià)值。

輸出描述

輸出一個(gè)整數(shù),代表小明能夠攜帶的研究材料的最大價(jià)值。

輸入示例
6 1
2 2 3 1 5 2
2 3 1 5 4 3
輸出示例
5
提示信息

小明能夠攜帶 6 種研究材料,但是行李空間只有 1,而占用空間為 1 的研究材料價(jià)值為 5,所以最終答案輸出 5。?

數(shù)據(jù)范圍:
1 <= N <= 5000
1 <= M <= 5000
研究材料占用空間和價(jià)值都小于等于 1000

狀態(tài):完成

思路:這是一個(gè)存粹的0-1背包的入門問題,先用二維的dp數(shù)組解決,dp[i][j]表示背包最大容量為j的時(shí)候從物品【0-i】任取,所以最后一個(gè)格就是背包容量是N時(shí)的最大價(jià)值,狀態(tài)轉(zhuǎn)移方程也是很好理解的dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-weights[i]]+values[i]),意思就是對(duì)比不取物品i時(shí)在這個(gè)容量時(shí)的最大價(jià)值和取這個(gè)物品在背包容量允許的情況下的價(jià)值。該題也是要初始化,dp[0][i]表示取物品0的最大價(jià)值。二維數(shù)組時(shí)先遍歷物品還是背包容量都是可以的。

可以從上面的二維數(shù)組思路中看出狀態(tài)轉(zhuǎn)移的時(shí)候其實(shí)就是把dp[i-1]行的與dp[i-1][j-weights[i]]+values[i]進(jìn)行對(duì)比所以我們可以直接用一個(gè)一維數(shù)組解決問題,這個(gè)數(shù)組中dp[i]表示背包容量為i的最大價(jià)值,轉(zhuǎn)移方程與二維數(shù)組的基本一致就是dp[i]跟dp[i-weights[i]]+values[i]進(jìn)行對(duì)比,但這里只能從大到小進(jìn)行容量的遍歷,因?yàn)槿绻〉酱髣t會(huì)重復(fù)加了。

dp二維數(shù)組:

import java.util.*;
public class Main{
    public static void main (String[] args) {
        Scanner sc=new Scanner(System.in);
        String l1=sc.nextLine();
        int M=Integer.valueOf(l1.split(" ")[0]),N=Integer.valueOf(l1.split(" ")[1]);
        int[] weights=new int[M];
        int[] values=new int[M];
        for(int i=0;i<M;i++){
            weights[i]=sc.nextInt();
        }
        for(int i=0;i<M;i++){
            values[i]=sc.nextInt();
        }
        int[][] dp=new int[M][N+1];
        for(int i=0;i<=N;i++){
            if(weights[0]<=i)
            dp[0][i]=values[0];
        }
        for(int i=1;i<M;i++){
            for(int j=1;j<=N;j++){
                if(j-weights[i]<0) dp[i][j]=dp[i-1][j];
                else dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-weights[i]]+values[i]);
            }
        }
        System.out.println(dp[M-1][N]);
        
    }
}

?dp一維數(shù)組:

import java.util.*;
public class Main{
    public static void main (String[] args) {
        Scanner sc=new Scanner(System.in);
        String l1=sc.nextLine();
        int M=Integer.valueOf(l1.split(" ")[0]),N=Integer.valueOf(l1.split(" ")[1]);
        int[] weights=new int[M];
        int[] values=new int[M];
        for(int i=0;i<M;i++){
            weights[i]=sc.nextInt();
        }
        for(int i=0;i<M;i++){
            values[i]=sc.nextInt();
        }
        int[] dp=new int[N+1];
        for(int i=0;i<M;i++){
            for(int j=N;j>0;j--){
                if(j-weights[i]<0) break;
                dp[j]=Math.max(dp[j],dp[j-weights[i]]+values[i]);
            }
        }
        System.out.println(dp[N]);
        
    }
}

416. 分割等和子集

給你一個(gè)?只包含正整數(shù)?的?非空?數(shù)組?nums?。請(qǐng)你判斷是否可以將這個(gè)數(shù)組分割成兩個(gè)子集,使得兩個(gè)子集的元素和相等。

示例 1:

輸入:nums = [1,5,11,5]
輸出:true
解釋:數(shù)組可以分割成 [1, 5, 5] 和 [11] 。

示例 2:

輸入:nums = [1,2,3,5]
輸出:false
解釋:數(shù)組不能分割成兩個(gè)元素和相等的子集。

提示:

  • 1 <= nums.length <= 200
  • 1 <= nums[i] <= 100

狀態(tài):沒想出來

思路:這個(gè)是恰好相等類的問題,這里的物品質(zhì)量跟物品價(jià)格都一致,我們使用一維dp數(shù)組去解決這個(gè)問題,dp[i]表示和為i時(shí)的最大數(shù)值,這題明顯只有和為數(shù)組和的半時(shí)才能得到兩個(gè)相等和的子數(shù)組。所以最后只要dp[target]==target表示存在這樣的子數(shù)組。

class Solution {
    public boolean canPartition(int[] nums) {
        int sum=0;
        for(int a:nums){
            sum+=a;
        }
        if(sum%2==1) return false;
        int target=sum/2;
        int[] dp =new int[target+1];
        for(int i=0;i<nums.length;i++){
            for(int j=target;j>=0;j--){
                if(j-nums[i]<0) break;
                dp[j]=Math.max(dp[j],dp[j-nums[i]]+nums[i]);
            }
        }
        return dp[target]==target;
    }
}

?文章來源地址http://www.zghlxwxcb.cn/news/detail-856146.html

到了這里,關(guān)于Day39 代碼隨想錄(1刷) 動(dòng)態(tài)規(guī)劃 0-1背包的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • 動(dòng)態(tài)規(guī)劃01背包問題-代碼隨想錄-刷題筆記

    動(dòng)態(tài)規(guī)劃01背包問題-代碼隨想錄-刷題筆記

    有n件物品和一個(gè)最多能背重量為w 的背包。第i件物品的重量是weight[i],得到的價(jià)值是value[i] 。 每件物品只能用一次 ,求解將哪些物品裝入背包里物品價(jià)值總和最大。 二維dp數(shù)組01背包 確定dp數(shù)組以及下標(biāo)的含義 是使用二維數(shù)組,即 dp[i][j] 表示從下標(biāo)為[0-i]的物品里任意取,

    2024年02月07日
    瀏覽(85)
  • 二刷代碼隨想錄——?jiǎng)討B(tài)規(guī)劃day40

    一個(gè)本碩雙非的小菜雞,備戰(zhàn)24年秋招,計(jì)劃二刷完卡子哥的刷題計(jì)劃,加油! 二刷決定精刷了,于是參加了卡子哥的刷題班,訓(xùn)練營(yíng)為期60天,我一定能堅(jiān)持下去,迎來兩個(gè)月后的脫變的,加油! 推薦一手卡子哥的刷題網(wǎng)站,感謝卡子哥。代碼隨想錄 終于來到了守關(guān)boss。

    2024年03月11日
    瀏覽(85)
  • 代碼隨想錄Day41:動(dòng)態(tài)規(guī)劃Part3

    代碼隨想錄Day41:動(dòng)態(tài)規(guī)劃Part3

    講解前: 毫無頭緒 講解后: 這道題的動(dòng)態(tài)思路一開始很不容易想出來,雖然dp數(shù)組的定義如果知道是動(dòng)態(tài)規(guī)劃的話估摸著可以想出來那就是很straight forward dp定義:一維數(shù)組dp[i], i 代表整數(shù)的值,dp[i] 代表將整數(shù) i 拆分的話可以獲得的最大乘積 然后呢就是定義遞歸推導(dǎo)式了,

    2024年04月27日
    瀏覽(27)
  • 代碼隨想錄第44天|動(dòng)態(tài)規(guī)劃:完全背包理論基礎(chǔ) 518.零錢兌換II 377. 組合總和 Ⅳ

    代碼隨想錄第44天|動(dòng)態(tài)規(guī)劃:完全背包理論基礎(chǔ) 518.零錢兌換II 377. 組合總和 Ⅳ

    代碼隨想錄 (programmercarl.com) 動(dòng)態(tài)規(guī)劃之完全背包,裝滿背包有多少種方法?組合與排列有講究!| LeetCode:518.零錢兌換II_嗶哩嗶哩_bilibili 完全背包和01背包問題唯一不同的地方就是,每種物品有無限件 。 完全背包中的物品可以添加多次,所以要從小到大遍歷: 518. 零錢兌換

    2024年04月25日
    瀏覽(26)
  • 代碼隨想錄 day38 第九章 動(dòng)態(tài)規(guī)劃part01

    ●??理論基礎(chǔ) ●??509.?斐波那契數(shù) ●??70.?爬樓梯 ●??746.?使用最小花費(fèi)爬樓梯 理論基礎(chǔ) 解決動(dòng)態(tài)規(guī)劃必須要想清楚的點(diǎn) dp數(shù)組以及下標(biāo)的含義 遞推公式 dp數(shù)組如何初始化 遍歷順序 打印數(shù)組 檢查結(jié)果 關(guān)聯(lián) leetcode 509.?斐波那契數(shù) 思路 動(dòng)規(guī)五部曲 dp數(shù)組以及下標(biāo)的含義

    2024年04月17日
    瀏覽(30)
  • 【代碼隨想錄】Day 49 動(dòng)態(tài)規(guī)劃10 (買賣股票Ⅰ、Ⅱ)

    【代碼隨想錄】Day 49 動(dòng)態(tài)規(guī)劃10 (買賣股票Ⅰ、Ⅱ)

    https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ dp[i]表示在第i天時(shí),賣/不賣股票能獲得的最大利潤(rùn): 1、賣股票:dp[i] = prices[i] -minPrice(i天以前的最低價(jià)格) 2、不賣股票:dp[i] = dp[i-1](因?yàn)椴毁u股票,所以狀態(tài)和前一天保持一致) ∴dp[i] = max(dp[i-1], prices[i] - minPrice); https

    2024年02月09日
    瀏覽(18)
  • 【Day52】代碼隨想錄之動(dòng)態(tài)規(guī)劃_打家劫舍

    動(dòng)態(tài)規(guī)劃理論基礎(chǔ) 動(dòng)規(guī)五部曲: 確定dp數(shù)組 下標(biāo)及dp[i] 的含義。 遞推公式:比如斐波那契數(shù)列 dp[i] = dp[i-1] + dp[i-2]。 初始化dp數(shù)組。 確定遍歷順序:從前到后or其他。 打印。 出現(xiàn)結(jié)果不正確: 打印dp日志和自己想的一樣:遞推公式、初始化或者遍歷順序出錯(cuò)。 打印dp日志和

    2024年02月22日
    瀏覽(28)
  • 【隨想錄學(xué)習(xí)】——第十章 動(dòng)態(tài)規(guī)劃(0-1背包+完全背包)

    【隨想錄學(xué)習(xí)】——第十章 動(dòng)態(tài)規(guī)劃(0-1背包+完全背包)

    動(dòng)態(tài)規(guī)劃,英文:Dynamic Programming,簡(jiǎn)稱DP,如果某一問題有很多重疊子問題,使用動(dòng)態(tài)規(guī)劃是最有效的。 所以動(dòng)態(tài)規(guī)劃中每一個(gè)狀態(tài)一定是由上一個(gè)狀態(tài)推導(dǎo)出來的, 這一點(diǎn)就區(qū)分于貪心 ,貪心沒有狀態(tài)推導(dǎo),而是從局部直接選最優(yōu)的, dp數(shù)組表示斐波那契數(shù)列,dp[i]表示

    2024年01月19日
    瀏覽(29)
  • 代碼隨想錄day42(背包)

    2024年02月13日
    瀏覽(19)
  • 代碼隨想錄 day44 完全背包

    class?Solution?{ public: ????int?change(int?amount,?vectorint?coins)?{ ????????vector?int?dp(amount+1,0); ????????dp[0]=1; ????????for(int?i=0;icoins.size();i++){ ????????????for(int?j=coins[i];j=amount;j++){ ????????????????dp[j]+=dp[j-coins[i]]; ????????????} ????????} ?

    2024年02月15日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包