首页 > 编程语言 >算法Day2—动态规划(剑指offer63+01背包问题(1))

算法Day2—动态规划(剑指offer63+01背包问题(1))

时间:2024-03-22 20:59:41浏览次数:30  
标签:01 offer63 weight int Day2 profit 背包 dp cost

剑指offer63:股票的最大利润

题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

转移方程:dp[i] = max(dp[i−1], 第i日卖出的最大利润中的最大值)

class Solution {
    public int maxProfit(int[] prices) {
        int cost = Integer.MAX_VALUE, profit=0;
        for(int price : prices){
            cost = Math.min(cost,price); //记录更新最小值
            profit = Math.max(profit,price-cost); //转移方程比较最大利润
        }
        return profit;
    }
}

 LCR 188. 买卖芯片的最佳时机 - 力扣(LeetCode)

01背包问题(1)

问题:有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

状态变量:dp[i][j] 表示前 i 件物品放入容量为 j 的背包的最大价值。(j为已用容量)

有两种选择:

  1. 不放入:dp[i][j] = dp[i-1][j],即物品 i 的重量大于背包 j 的重量
  2. 放入:则上一步的状态为 dp[i-1][j-weight[i]],当前状态 dp[i][j] = dp[i-1][j-weight[i]] + value[i]

递推公式:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])

递推和递归的区别:

递归:在一个函数的定义中又直接或间接地调用本身

递推:用若干步可重复运算来描述复杂问题的方法。

边界:dp[0][j]:存放编号为 0 的物品,容量为 j 的背包所能存放的最大价值

        当 j < weight[0] 时,dp[0][j] = 0

        当 j >= weight[0] 时,dp[0][j] = value[0]

(未完待续...)

JAVA常识

Integer.MAX_VALUE
int m = Integer.MAX_VALUE //表示int数据类型的最大取值数:2 147 483 647
 if判断

if(布尔表达式){

        //如果布尔表达式的值为true

}else{

        //如果布尔表达式的值为false

}

 for循环(2)

for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体

标签:01,offer63,weight,int,Day2,profit,背包,dp,cost
From: https://blog.csdn.net/m0_47391737/article/details/136951436

相关文章

  • P1075 [NOIP2012 普及组] 质因数分解
    P1075[NOIP2012普及组]质因数分解[NOIP2012普及组]质因数分解题目描述已知正整数\(n\)是两个不同的质数的乘积,试求出两者中较大的那个质数。输入格式输入一个正整数\(n\)。输出格式输出一个正整数\(p\),即较大的那个质数。样例#1样例输入#121样例输出#1......
  • COMP0197 应用深度学习
    COMP0197CW11.COMP0197:应用深度学习评估部分1(个人课程)2023-24在Moodle上于2024年3月21日16:00(英国时间)之前提交(可能会更改)介绍这是两门评估课程中的第一门。这门课程占模块的50%,共有三门独立的任务,对于每个任务,任务脚本需要与其他支持文件一起提交,并且数据不需要单独的书面报告......
  • 01-Spark的Local模式与应用开发入门
    1Spark的local模式Spark运行模式之一,用于在本地机器上单机模拟分布式计算的环境。在local模式下,Spark会使用单个JVM进程来模拟分布式集群行为,所有Spark组件(如SparkContext、Executor等)都运行在同一个JVM进程中,不涉及集群间通信,适用本地开发、测试和调试。1.1重......
  • 算法打卡day25|回溯法篇05|Leetcode 491.递增子序列、46.全排列、47.全排列 II
     算法题Leetcode491.递增子序列题目链接:491.递增子序列大佬视频讲解:递增子序列视频讲解 个人思路和昨天的子集2有点像,但昨天的题是通过排序,再加一个标记数组来达到去重的目的。而本题求自增子序列,是不能对原数组进行排序的,因为排完序的数组都是自增子序列了。解决......
  • 蓝桥杯2015省B——生命之树
     蓝桥杯官网 洛谷[蓝桥杯2015省B]生命之树题目描述在X森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集 S(这里洛谷和蓝桥杯官网的不一样),使得对于S 中的任意两个点......
  • P1308 [NOIP2011 普及组] 统计单词数
    P1308[NOIP2011普及组]统计单词数[NOIP2011普及组]统计单词数题目描述一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文......
  • P2615 [NOIP2015 提高组] 神奇的幻方
    P2615[NOIP2015提高组]神奇的幻方[NOIP2015提高组]神奇的幻方题目背景NOIp2015提高组Day1T1题目描述幻方是一种很神奇的\(N\timesN\)矩阵:它由数字\(1,2,3,\cdots\cdots,N\timesN\)构成,且每行、每列及两条对角线上的数字之和都相同。当\(N\)为奇数时,我们......
  • P5657 [CSP-S2019] 格雷码
    #include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;typedefunsignedlonglongUll;constunsignedlonglo......
  • Istio实战-01.环境部署
    目录环境说明操作说明下载Istio安装Istio部署应用对外暴露应用程序部署仪表板卸载删除BookInfo应用删除Istio删除命名空间删除Envoy边车代理的标签参考链接转载请注明出处环境说明Centos7.9Docker24.0.7Kubernetes1.23.5操作说明以下指令全部在Kubernetes......
  • 【转载】解决 安装或卸载软件时报错Error 1001 的问题
    卸载或安装程序时出错1001:错误1001可能发生在试图更新、修复或卸载windowsos中的特定程序时。此问题通常是由于程序的先前安装损坏而引起的。错误“1001”通常会遇到,因为程序的先前安装被破坏或者由于Windows安装不处于正常状态(例如,注册表已经被恶意软件修改)。在这种情况......