首页 > 编程语言 >算法--2023.1.25

算法--2023.1.25

时间:2023-01-25 16:11:23浏览次数:45  
标签:25 Scanner -- int 2023.1 new public dp

1.力扣122--买卖股票的最佳时机2

class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int[][] dp = new int[n][2];
        //二维动态规划,
        dp[0][0] = 0;dp[0][1] = -prices[0];
        //dp[i][0]代表当前不持有股票的最大收益,dp[i][1]代表当前持有股票的最大收益
        for(int i = 1;i<n;i++){
            dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);
            dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]-prices[i]);
        }
        return dp[n-1][0];
    }
}

2.力扣309--最佳买卖股票时机含冷冻期

class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int[][] dp = new int[n][3];
        //三维动态规划
        dp[0][0] = 0; dp[0][1] = 0; dp[0][2] = -prices[0];
        for(int i = 1;i<n;i++){
            //dp[i][0]代表卖出的最大值,
            dp[i][0] = Math.max(Math.max(dp[i-1][0],dp[i-1][1]),dp[i-1][2]+prices[i]);
            //dp[i][1]代表冷冻期的值,该值只能是上一轮卖出的值
            dp[i][1] = dp[i-1][0];
            //dp[i][2]代表买入后的最大值,注意实际买入只能在冷冻期后面就是dp[i][1]后面
            dp[i][2] = Math.max(dp[i-1][1]-prices[i],dp[i-1][2]);
        }
        return Math.max(dp[n-1][0],dp[n-1][1]);
    }
}

3.acwing2--01背包问题

  

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(), capcity = in.nextInt();
        int[][] nums = new int[n][2];
        for(int i = 0;i<n;i++){
            int a = in.nextInt(), b = in.nextInt();
            nums[i][0] = a;
            nums[i][1] = b;
        }
        System.out.println(packageProblem(nums,capcity));
    }
    public static int packageProblem(int[][] nums, int capcity){
        int[][] dp = new int[nums.length+1][capcity+1];
        for(int i = 1;i<=nums.length;i++){
            for(int j = 1;j<=capcity;j++){
                
                    dp[i][j] = dp[i-1][j];
                    if(nums[i-1][0]<=j){
                     dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - nums[i - 1][0]] + nums[i - 1][1]);
                    }
            }
        }
        int res = 0;
        for(int i = 1;i<=capcity;i++){
            res = Math.max(res,dp[nums.length][i]);
        }
        return res;
    }
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(), capcity = in.nextInt();
        int[][] nums = new int[n][2];
        for(int i = 0;i<n;i++){
            int a = in.nextInt(), b = in.nextInt();
            nums[i][0] = a;
            nums[i][1] = b;
        }
        System.out.println(packageProblem(nums,capcity));
    }
    public static int packageProblem(int[][] nums, int capcity){
        int[] dp = new int[capcity+1];
        for(int i = 1;i<=nums.length;i++){
            for(int j = capcity;j>=nums[i-1][0];j--){
                    dp[j] = Math.max(dp[j-nums[i-1][0]] + nums[i-1][1],dp[j]);
            }
        }
        return dp[capcity];
    }
}

  

4.acwing3--完全背包问题

import java.util.Scanner;

public class acwing3 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(), capcity = in.nextInt();
        int[][] nums = new int[n][2];
        for(int i = 0;i<n;i++){
            nums[i][0] = in.nextInt();
            nums[i][1] = in.nextInt();
        }
        int[] dp = new int[capcity+1];
        for(int i = 0;i<n;i++){
            for(int j = nums[i][0];j<=capcity;j++){
                dp[j] = Math.max(dp[j],dp[j-nums[i][0]] + nums[i][1]);
            }
        }
        System.out.println(dp[capcity]);
    }
}

5.力扣322--零钱兑换

class Solution {
    public int coinChange(int[] coins, int amount) {
    //完全背包问题的动态规划
        int n = coins.length;
        int[] dp = new int[amount+1];
        for(int i = 0;i<=amount;i++){
            dp[i] = 0x3f3f3f3f;
        }
        dp[0] = 0;
        for(int i = 0;i<n;i++){
            //不同轮代表用到的不同硬币
            for(int j = coins[i];j<=amount;j++){
                //dp[j]代表这一轮中容量为j的时候的最小硬币个数
                //因为这里的硬币是可以重复使用的,所以应该从前向后遍历
                dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);
            }
            System.out.println(dp[amount]);
        }
        if(dp[amount] == 0x3f3f3f3f){
            return -1;
        }
        return dp[amount];
    }
}

  

  

  

标签:25,Scanner,--,int,2023.1,new,public,dp
From: https://www.cnblogs.com/lyjps/p/17067018.html

相关文章

  • Factory Method Design Pattern in C#
    需要记住的最重要的一点是,工厂方法设计模式与简单工厂设计模式并不完全相同。大多数人认为两者是相同的,因此他们可以互换地使用术语工厂和工厂方法,这是不对的。一、什么是......
  • 基于PHP实现的Laravel9+Vue+ElementUI大数据分析管理系统
    项目介绍一款PHP语言基于Laravel9.x、Vue、ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本......
  • 基于Laravel9+Vue+ElementUI的管理系统模板源码
    项目介绍一款PHP语言基于Laravel9.x、Vue、ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本......
  • PHP语言的Laravel9+Vue+ElementUI开源框架推荐
    项目介绍一款PHP语言基于Laravel9.x、Vue、ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本......
  • Knative的事件驱动组件Eventing
    KnativeEventing是Knative平台的通用事件驱动组件,它实现了云原生应用开发对事件驱动的通用需求,同时还提供了一组可组合的原语,实现了事件源和消费者之间的延迟绑定。Knati......
  • Ubuntu虚拟机不显示ipv4地址 (虚拟机无法连接网络)
    相信很多朋友都遇到过虚拟机连接不上网络或者说使用ifconfig不显示ipv4网络地址的情况,就想下图一样:  网上请教很多大神都说更改“网络连接”为“NAT模式”,但是试了无......
  • POJ1002 487-3279
    描述商人们喜欢使用方便记忆的电话号码。让号码方便记忆的一种方法是让它拼成好记的单词或词组。例如,你可以叫Waterloo大学TUT-GLOP。有时候只有数字的一部分参与拼写。当......
  • Day14 - 网络编程
    1.IP地址IP地址的概念IP地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。网络中的设备效果图:IP地址的表现形式说明:IP地址分为两类:IPv4......
  • python3中reload()
    reload(),是python3.0中重载模块在python中,每一个以.py结尾的Python文件都是一个模块。其他的文件可以通过导入一个模块来读取该模块的内容。导入从本质上来讲,就是载......
  • 二分查找的三种形式&两道力扣
    前言过年前刷Leetcode的时候遇到这样一道题目:354.俄罗斯套娃信封问题-力扣(Leetcode)其中使用patiencesorting这个算法的做法中,因为牌堆顶是有序数组,所以可以使用二分......