左神算法之中级提升(5) 背包问题

news2024/12/28 19:24:31

目录

【案例1】

【题目描述】

 【思路解析】

【代码实现】

 【案例2】 【 2019 网易面试题】

【题目描述】

【思路解析】

【代码实现】

【案例3】

【题目描述】

 【思路分析】

【代码实现】


【案例1】

【题目描述】

 【思路解析】

背包问题:

【代码实现】

 

/**
 * @ProjectName: study3
 * @FileName: Ex6
 * @author:HWJ
 * @Data: 2023/7/13 12:15
 */
public class Ex6 {
    public static void main(String[] args) {
        int[] v = {3,2,5,2,3};
        System.out.println(getWays(v, 10));
    }

    public static int getWays(int[] v, int w){
        int[][] dp = new int[v.length][w + 1];
        dp[0][0] = 1;
        dp[0][v[0]] = 1;
        for (int i = 1; i < dp.length; i++) {
            for (int j = 0; j <= w; j++) {
                if (j >= v[i]){
                    dp[i][j] = dp[i-1][j] + dp[i-1][j - v[i]];
                }else {
                    dp[i][j] = dp[i-1][j];
                }
            }
        }
        int res = 0;
        for (int i = 0; i <= w; i++) {
            res += dp[v.length - 1][i];
        }
        return res;
    }


}

 【案例2】 【 2019 网易面试题】

【题目描述】

 同一个工作,可以去无数个人。

【思路解析】

先将工作按照难度排序,然后就得到了所有工作在不同难度上的最优解,有序表中存放相同难度利益最大的那个,然后再满足有序表中的工作难度增大时,利益同时增大的表。

【代码实现】

import java.util.*;

/**
 * @ProjectName: study3
 * @FileName: Ex7
 * @author:HWJ
 * @Data: 2023/7/13 13:31
 */
public class Ex7 {
    public static void main(String[] args) {
        Job job = new Job(5, 3);
        Job job1 = new Job(14, 6);
        Job job2 = new Job(12, 5);
        Job job3 = new Job(9, 3);
        Job job4 = new Job(25, 8);
        Job job5 = new Job(15, 7);
        Job job6 = new Job(14, 11);
        Job job7 = new Job(5, 2);
        Job job8 = new Job(6, 9);
        Job[] jobs = {job,job1,job2,job3,job4,job5,job6,job7,job8};
        int[] ability = {1,5,74,5,6,24,5,6,3,2,1,4,5,8,9,7,15,2,25,624,24};
        System.out.println(Arrays.toString(salary1(jobs, ability)));
        System.out.println(Arrays.toString(salary2(jobs, ability)));
    }

    public static class Job {
        public int money;
        public int hard;

        public Job(int money, int hard) {
            this.money = money;
            this.hard = hard;
        }
    }

    // 使用有序表做
    public static int[] salary1(Job[] jobs, int[] ability) {
        Arrays.sort(jobs, new Comparator<Job>() {
            @Override
            public int compare(Job o1, Job o2) {
                return o1.hard != o2.hard ? o1.hard - o2.hard : o2.money - o1.money;
            }
        });
        TreeMap<Integer, Integer> map = new TreeMap<>();
        map.put(jobs[0].hard, jobs[0].money);
        Job pre = jobs[0];
        for (int i = 1; i < jobs.length; i++) {
            if (jobs[i].hard > pre.hard && jobs[i].money > pre.money) {
                pre = jobs[i];
                map.put(pre.hard, pre.money);
            }
        }
        int[] res = new int[ability.length];
        for (int i = 0; i < res.length; i++) {
            Integer key = map.floorKey(ability[i]);
            res[i] = key == null ? 0 : map.get(key);
        }
        return res;
    }
    
}

【案例3】

【题目描述】

 【思路分析】

总结日常书写形式的规范:

(1)数字之外只允许有减号‘-’出现。

(2)如果有‘-’,只能在开头,并且只能出现一次,且后面必须跟数字,但数字不能是0.

(3)如果开头数字是0,后面不能在出现字符了。

如果这个字符串合法,转为int类型数字时,需要时刻判断是否越界了。又因为int负数的值更大,所以我们统一将所有的数刚开始都转为负数,然后再转为相应的值。

【代码实现】

/**
 * @ProjectName: study3
 * @FileName: Ex8
 * @author:HWJ
 * @Data: 2023/7/13 14:03
 */
public class Ex8 {
    public static void main(String[] args) {

    }

    public static boolean convert(String strs) {
        char[] str = strs.toCharArray();
        if (str[0] == '-' && (str.length == 1 || str[1] == '0')) {
            return false;
        }
        if (str[0] != '-' && (str[0] > '9' || str[0] < '0')) {
            return false;
        }
        if (str[0] == '0' && str.length > 1) {
            return false;
        }
        for (int i = 1; i < str.length; i++) {
            if (str[i] > '9' || str[i] < '0') {
                return false;
            }
        }
        return true;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【分布式能源的选址与定容】基于多目标粒子群算法分布式电源选址定容规划研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

解决git clone的库文件太大的问题

一直想git clone 下来的我自己库可能库大小太大&#xff0c;git不下来 https://www.kancloud.cn/maryong/maryong/1800760 在网络情况不稳定下克隆项目时&#xff0c;可能会出现下图中的错误。 问题原因&#xff1a; http缓存不够或者网络不稳定等。 解决方案&#xff1a;打开…

运算符重载和const成员 (日期类的实现C++)

运算符重载和const成员 const成员const修饰类成员函数const对象调用权限小结 运算符重载 const成员 const成员函数&#xff1a;const修饰的成员函数。const修饰类成员函数&#xff0c;实际限制的是*this&#xff0c;表明该成员函数不能对类的任何成员进行修改。 const修饰类成…

设计模式-建造者模式在Java中使用示例

场景 建造者模式 复杂对象的组装与创建 没有人买车会只买一个轮胎或者方向盘&#xff0c;大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。 如何将这些部件组装成一辆完整的汽车并返回给用户&#xff0c;这是建造者模式需要解决的问题。 建造者模式又称为…

复选框,购物车功能,单选,全选

<template><view class"index"><u-navbar title"购物车" :is-back"false" :border-bottom"false" title-color"#333":background"{background:#fff}"><view class"page_navbar_warp&qu…

探究ThreadLocal和ThreadPoolExecutor中的内存泄露风险与防范策略

探究ThreadLocal和ThreadPoolExecutor中的内存泄露风险与防范策略 本文将探讨ThreadLocal和ThreadPoolExecutor中可能存在的内存泄露问题&#xff0c;并提出相应的防范策略。 ThreadPoolExecutor的内存泄露问题 ThreadPoolExecutor是一个线程池类&#xff0c;它可以管理和复…

【PHP面试题39】linux下面chmod和chown使用详解

文章目录 一、前言二、什么是 chmod 命令&#xff1f;2.1 使用方法&#xff1a;2.2 数值表示法&#xff1a;2.3 符号表示法&#xff1a; 三、什么是 chown 命令&#xff1f;3.1 使用方法&#xff1a;3.2 更改所有者和用户组&#xff1a; 四、使用示例4.1 使用 chmod 命令修改权…

媒体邀约:企业新品发布会如何邀约记者到现场采访报道?

媒介易是国内领先的全媒体广告营销平台&#xff0c;专注全媒体营销平台创新服务。我们有超过近11年的实战经验&#xff0c;我们拥有丰富的媒体记者资源&#xff0c;关于邀约记者到现场采访&#xff0c;我们会采取以下步骤&#xff1a; 1、提前策划&#xff1a;在发布会前至少…

MATLAB 基于NDT的点云配准实验(不同参数效果) (25)

MATLAB 基于NDT的点云配准实验(不同参数效果) (25) 一、算法简介二、具体使用1.代码(注释详细)2.结果(不同参数 与ICP比较)一、算法简介 NDT点云配准与ICP一样,都是经典的点云配准算法,这里使用MATLAB进行ndt点云配准,对配准结果进行显示,并尝试不同参数,得到较好…

单元测试用例到底该如何设计?

目录 前言 使用参数方法创建测试用例 使用执行路径方法创建测试用例 总结 前言 最近一些大公司在进行去测试化的操作&#xff0c;这一切的根源大概可以从几年前微软一刀切砍掉所有内部正式的测试人员开始说起&#xff0c;当时微软内部的测试工程师有一部分转职成了开发工程…

STM32 Proteus仿真红外检测PWM调速温控风扇-0073

STM32 Proteus仿真红外检测PWM调速温控风扇-0073 Proteus仿真小实验&#xff1a; STM32 Proteus仿真红外检测PWM调速温控风扇-0073 功能&#xff1a; 硬件组成&#xff1a;STM32F103C6单片机 LCD1602显示器DS18B20温度传感器人检测 按下说明有人L298驱动电机模拟风扇 1.按键…

PWM呼吸灯设计

呼吸灯&#xff1a; 呼吸灯是一种特殊的灯光效果&#xff0c;它可以模拟呼吸的效果&#xff0c;即灯光逐渐由暗变亮再由亮变暗&#xff0c;循环往复。这种效果给人一种柔和、舒缓的感觉&#xff0c;常被应用在装饰、照明和显示等领域。 PWM呼吸灯设计&#xff1a; 在数字电路设…

Windows搭建Nginx实现RTMP转为HLS流

所需软件 nginx-1.7.11.3-Gryphon&#xff08;这个包含必须的RTMP模块&#xff0c;普通的Ngxin没有这个&#xff09;ffmpegVLC 配置Nginx 1为Nginx配置RTMP和HLS 这里定义了一个叫live的RTMP路径。同时设置其开启HLS功能&#xff0c;那么所有推送到这个地址的RTMP流都会自动生…

AWS MSK集群认证和加密传输的属性与配置

通常&#xff0c;身份认证和加密传输是两项不相关的安全配置&#xff0c;在Kafka/MSK上&#xff0c;身份认证和加密传输是有一些耦合关系的&#xff0c;重点是&#xff1a;对于MSK来说&#xff0c;当启用IAM, SASL/SCRAM以及TLS三种认证方式时&#xff0c;TLS加密传输是必须的&…

C++STL库中的string

文章目录 STL库对于string类的介绍 string常用接口 string类的模拟实现 string对象大小的计算 写时拷贝 前言 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字…

青龙面板集合仓库(不断更新)青龙面板,京东定时任务库,脚本库大全

文章目录 文章目录前言简易一键安装脚本库最新京东比价小插件 文章目录 前言 Faker维护仓库&#xff0c;本地sign保证CK安全防泄漏&#xff0c;收集全网目前能正常使用的脚本。 全网能用的&#xff0c;本仓库都有。有问题进群反馈。 简易一键安装 最新版青龙有可能造成脚本…

软件测试技能提升自学,如何学?

又到了年底&#xff0c;对于我们测试同学来说&#xff0c;多多少少会立一些flag。我已经被连续打脸了好几年&#xff0c;生活为什么总是这么不易&#xff1f;好了&#xff0c;不扯远了&#xff0c;我们今天的主题是自学的那些事。 学习新的技能我相信是每一个测试同学都要面对…

使用MFC CAD 的一些使用方式记录【追加ing】

1. 项目调试&#xff1a;由于项目很大&#xff0c;因此&#xff0c;我们调试的时候&#xff0c;不应该编译整个软件而是应该只编译对应的 类去做处理 2. debug 设置断点方面&#xff1a; 以往我们的操作都是在.exe直接执行文件上进行操作&#xff0c;但是&#xff0c;现在&am…

解决虚拟机安装debian系统报错The failing step is: Select and install software

一波三折&#xff0c;一直卡在这一步&#xff0c;总是到不了流行度调查以及选择软件的界面。 下面是最终正确的步骤&#xff1a; 1&#xff0c;镜像源选项选择yes&#xff1b; 2&#xff0c;镜像源地区选择china&#xff1b; 3&#xff0c;镜像源地址可选mirrors.163.com&am…

Linux离线安装Jenkins、Maven、Gitlab、Git,部署Java项目

安装Java 《Linux安装java》 安装Maven 把Maven上传到Linux服务器/data/目录下进行解压 cd /data/ && tar -zxvf apache-maven-3.9.3-bin.tar.gz配置环境变量 vim /etc/profile找到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL在下面追加 # mave…