首页 > 其他分享 >(44/60)完全背包、零钱兑换Ⅱ、组合总和Ⅳ

(44/60)完全背包、零钱兑换Ⅱ、组合总和Ⅳ

时间:2024-03-21 23:57:23浏览次数:24  
标签:背包 int 44 coins number 60 零钱 物品 dp

day44

完全背包

卡码网:携带研究材料(第七期模拟笔试)

动态规划

思路

完全背包,物品可以无限次取,正序遍历。

复杂度分析

时间复杂度:O(N^2)。

空间复杂度:O(N)。

代码实现

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

/*
给j的容量可重复选择的最大价值为dp[j]
dp[j] = max(dp[j],dp[j-weight[i]] + value[i])
初始化为0
先物品后背包,正序(先背包后物品也行,但是要正序)
*/

int main(){
    int N = 0;  // item types
    int V = 0;  // opacity
    cin>>N;
    cin>>V;
    vector<int> weight(N,0);
    vector<int> value(N,0);
    vector<int> dp(V+1,0);
    for(int i = 0;i < N;i++){
        cin>>weight[i];
        cin>>value[i];
    }
    
    for(int i = 0;i < N;i++){
        for(int j = 1;j <= V;j++){
            if(j >= weight[i]){ // 装得下的时候才尝试更新
                dp[j] = max(dp[j],dp[j-weight[i]] + value[i]);
            }
        }
    }
    
    cout<<dp[V];
    
    return 0;
}


零钱兑换Ⅱ

leetcode:518. 零钱兑换 II

动态规划

思路

复杂度分析

时间复杂度:O(N^2)。

空间复杂度:O(N)。

代码实现

C++:

class Solution {
public:
/*
装满j的空间,物品重复去取,总共有dp[j]种方法
dp[j] += dp[j-coins[i]]
初始化为0
先背包再物品,正序
*/
    int change(int amount, vector<int>& coins) {
        vector<int> dp(amount+1,0);
        dp[0] = 1;
        for(int i = 0;i < coins.size();i++){	// 物品
            for(int j = coins[i];j <= amount;j++){	// 背包
                dp[j] += dp[j - coins[i]];
            }
        }

        return dp[amount];
    }
};

TS:

/**
物品重复取装满容量j的背包,总共有dp[j]种方法
dp[j] += dp[j - coins[i]];
dp[0] = 1 其余为0
先物品后背包,正序
*/

function change(amount: number, coins: number[]): number {
    let dp = new Array(amount+1).fill(0);
    dp[0] = 1;
    for(let i = 0;i < coins.length;i++){
        for(let j = coins[i];j <= amount;j++){
            dp[j] += dp[j-coins[i]];
        }
    }

    return dp[amount];
};

组合总和Ⅳ

leetcode:377. 组合总和 Ⅳ

动态规划

注意点

  1. 物品一定要完整遍历(和组合不一样,组合有时可以剪枝)

代码实现

/**
物品取无限次,装满容量为j的背包,总共有dp[j]种方法
dp[j] += dp[j - nums[i]];
dp[0] = 1;其余为0
排列,所以先背包再物品,正序
 */

function combinationSum4(nums: number[], target: number): number {
    const dp:number[] = new Array(target+1).fill(0);
    dp[0] = 1;
    for(let j = 1;j <= target;j++){	// 背包
        for(let i = 0;i < nums.length;i++){	// 物品
            if(j >= nums[i]) dp[j] += dp[j - nums[i]];
        }
    }

    return dp[target];
};

标签:背包,int,44,coins,number,60,零钱,物品,dp
From: https://www.cnblogs.com/tazdingo/p/18088504

相关文章

  • (51/60)买卖股票的最佳时机含冷冻期、买卖股票的最佳时机含手续费
    day51买卖股票的最佳时期含冷冻期leetcode:309.买卖股票的最佳时机含冷冻期动态规划代码实现/*意义:下标为i时各种情况的收益dp[i][0]持有dp[i][1]当天卖出dp[i][2]之前不持有递推:dp[i][0]=max(dp[i-1][0],dp[i-1][2]-prices[i]);//之前持有、之前不持有且当......
  • (50/60)买卖股票的最佳时机Ⅲ、买卖股票的最佳时机Ⅳ
    day50买卖股票的最佳时机Ⅲleetcode:123.买卖股票的最佳时机III动态规划代码实现/*意义:下标为i时,不同状态收益为dp[i][0]未持有dp[i][1]第一次持有dp[i][2]第一次未持有dp[i][3]第二次持有dp[i][4]第二次未持有递推:dp[i][0]=dp[i-1][0];之前未持有dp[i]......
  • (48/60)买卖股票的最佳时机、买卖股票的最佳时机Ⅱ
    day48买卖股票的最佳时机leetcode:121.买卖股票的最佳时机动态规划代码实现/*意义:dp[i][0]下标为i天持有股票的最大收益;dp[i][1]下标为i天不持股的最大收益递推:之前买入、当天买入:dp[i][0]=max(dp[i-1][0],-prices[i]);之前卖出、当天卖出:dp[i][1]=max(dp[i-1][1],......
  • (47/60)打家劫舍、打家劫舍Ⅱ、打家劫舍Ⅲ
    day47打家劫舍leetcode:198.打家劫舍动态规划代码实现/*偷到下标为i的最大金额数为dp[i]偷i、不偷i:dp[i]=max(dp[i-2]+nums[i],dp[i-1]);dp[0]=nums[0];dp[1]=max(nums[0],nums[1]);正序遍历*/classSolution{public:introb(vector<int>&nums){......
  • 1943+1944.Codeforces Round 934 (Div. 1,Div. 2) - sol
    20240321终于差不多把Div1补完了(F当然没补),第一次打Div1,还是出了一些小状况的。唉。没有补Div1F的逆天题,选择放弃。Dashboard-CodeforcesRound934(Div.2)-CodeforcesDashboard-CodeforcesRound934(Div.1)-Codeforces2A.DestroyingBridgesThere......
  • 二叉树的深度优先遍历(力扣94,144,145)
    文章目录题目前知二叉树的遍历方式有什么?递归和迭代是什么?题解一、思路二、解题方法三、Code总结题目Problem:144.二叉树的前序遍历Problem:94.二叉树的中序遍历Problem:145.二叉树的后序遍历前知二叉树的遍历方式有什么?二叉树主要有两种遍历方式:......
  • 科技赋能生活:KTH1601让垃圾桶“懂”你的需求
    在现代社会,科技的快速发展不仅仅改变了我们的生活方式,甚至连日常生活中的垃圾桶也变得“智能”起来。高性能、低功耗霍尔开关传感器KTH1601,正是让智能垃圾桶能够自动感应、自动开关的关键所在。它是由昆泰芯微电子科技有限公司研发的一款全极磁场检测传感器,具备非常低的功耗......
  • MT2492 16V输入 600KHz 2A DCDC同步降压转换器 航天民芯一级代理
    深圳市润泽芯电子有限公司为航天民芯一级代理描述  MT2492是一款完全集成的高效率产品2A同步整流降压变换器。MT2492在一段时间内高效运行宽输出电流负载范围。该设备提供两种工作模式,即PWM控制和PFM模式切换控制在更宽的工作范围内实现高效率加载。MT2492需要最少数量的......
  • 汽车用GMR角度传感器,TLE5014P16DXUMA1、TLE5014S16DXUMA1、TLE5014SP16DE0002XUMA1(360
    TLE5014GMR角度传感器有以下型号可供选择:TLE5014C16:汽车用GMR角度传感器,带SPC接口TLE5014P16:汽车用GMR角度传感器,带PWM接口TLE5014S16:汽车用GMR角度传感器,带SENT接口概述TLE5014基于巨磁阻(GMR)的角度传感器侧重于转向角传感器,设计用于汽车应用的角度位置检测。这些传感......
  • P1960 郁闷的记者
    原题链接题解拓扑排序,层级标记,如果层级等于n,代表层次分明code#include<bits/stdc++.h>usingnamespacestd;vector<int>G[500005];intin[500005]={0};structnode{intid,layer;};intmain(){intn,m;cin>>n>>m;for(inti=1;i<=m;i++)......