【Acwing寒假2023每日一题】4700. 何以包邮?- 01背包dp至少模板

news2024/11/19 7:23:51

4700. 何以包邮? - AcWing题库

设满x元包邮,题目要求总价值至少x的最小价值

目录

1、一维 01背包-至少模板

至少模板和至多模板的两大区别

2、二分 + 二维 01背包-至多模板

(1)二维dp 

3、逆向思维 + 一维 01背包-至多模板


1、一维 01背包-至少模板

思路:

至少模板和至多模板的两大区别

  • 初始化不同
  • 至多模板求的是最大值,所以初始化为f[0~m]=0
  • 至少模板求的是最小值,所以初始化为f[0]=0  f[1~m]=0x3f3f3f3f
  • j 循环范围不同:
  • 至多模板 for(int j=m;j>=w[i];j--) f[j] = max(f[j] , f[ j-w[i] ] + w[i])
  • 至少模板 for(int j=m;j>=0;j--) f[j] = min(f[j] , f[ max(j-w[i] , 0) ] + w[i])
import java.util.*;

class Main
{
    static int N=35,M=30*10000+10;
    static int[] w=new int[N];
    static int[] f=new int[M];
    static int n,x;
    
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();x=sc.nextInt();
        for(int i=1;i<=n;i++)  w[i]=sc.nextInt(); 
        
        Arrays.fill(f,0x3f3f3f3f);
        f[0]=0;
        for(int i=1;i<=n;i++)
            for(int j=x;j>=0;j--)
                f[j]=Math.min(f[j],f[Math.max(j-w[i],0)]+w[i]);
        
        System.out.print(f[x]);
    }
}

2、二分 + 二维 01背包-至多模板

思路:

由于买的书越多,总价值越大,满足单调性

所以我们可以用二分找出总价值≥x的最小价值

二分区间是【x,30*10^{4}】,用r=mid二分模板

check(mid)函数用于判断是否满足包邮条件,函数内用01背包模板(求的是总价值不超过mid的最大价值),如果f[n][mid]>=x,则可以往小寻找,否则往大寻找

(1)二维dp 

import java.util.*;

class Main
{
    static int N=35,M=30*10000+10;
    static int[] w=new int[N];
    static int[][] f=new int[N][M];
    static int n,x;
    
    //f[i][j] 只选前i件物品,总价格不超过j的情况下,最大价值
    public static int ck(int xx)
    {
        f[0][0]=0;
        for(int i=1;i<=n;i++)
            for(int j=0;j<=xx;j++)
            {
                f[i][j]=f[i-1][j];
                if(j>=w[i]) f[i][j]=Math.max(f[i][j],f[i-1][j-w[i]]+w[i]);
            }
        return f[n][xx];
    }
    
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        x=sc.nextInt();
        for(int i=1;i<=n;i++) w[i]=sc.nextInt();
        
        int l=x,r=300000;
        while(l<r)
        {
            int mid=l+r>>1;
            if(ck(mid)>=x) r=mid;
            else l=mid+1;
        }
        System.out.print(r);
    }
}

3、逆向思维 + 一维 01背包-至多模板

思路:

题目要让满足≥x的情况下最小价值

我们可以统计所有物品的总价值sum

剩余物品总价值sum-x,让剩余不选物品的总价值越大,则需要选的物品总价值越小

所以我们可以求出总价值不超过sum-x的最大价值(一旦超过,则所选物品不满足包邮条件)

最后让sum-最大价值,即为满足包邮条件的最小价值

import java.util.*;

class Main
{
    static int N=35,M=30*10000+10;
    static int[] w=new int[N];
    static int[] f=new int[M];
    static int n,x;
    
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        x=sc.nextInt();
        int sum=0;
        for(int i=1;i<=n;i++)
        {
           w[i]=sc.nextInt(); 
           sum+=w[i];
        }
        int sur=sum-x;
        //在剩余价值里找最大价值 则要选价值则越小
        for(int i=1;i<=n;i++)
            for(int j=sur;j>=w[i];j--)
                f[j]=Math.max(f[j],f[j-w[i]]+w[i]);
        
        System.out.print(sum-f[sur]);
    }
}

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

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

相关文章

1.环境搭建 创建spring boot 项目(mac)

1.安装maven 首先你需要在maven官网上下载mac专用的二进制maven压缩包。也就是下图的这个&#xff1a; 然后&#xff0c;开始我们的配置。 1、打开终端&#xff0c;输入这个代码&#xff1a; vim ~/.bash_profile 2、然后点击键盘上的“i”&#xff0c;进入vim编辑模式&…

【BBuf的CUDA笔记】五,解读 PyTorch index_add 操作涉及的优化技术

本文把pytorch index_add算子的代码抽取出来放在&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/blob/master/indexing/index_add_cuda_pytorch_impl.cu 。如果不太熟悉PyTorch的话也可以直接看这个.cu文件&#xff0c;有问题请在这个repo提issue。 0x0.…

2022,我感受到了CSDN不平凡

最初注册CSDN&#xff0c;只是因为老师的要求&#xff0c;负责教C课程的老师让同学们注册CSDN&#xff0c;并经常更新自己的博客。虽然注册了CSDN的博客&#xff0c;也写了几篇博客文章&#xff0c;可最初我并不理解老师为什么要让我们注册&#xff0c;可是随着在CSDN驻留时间的…

运行时数据区

目录 一、概述 1.1、数据区 1.2、JAVA线程数据区 二、线程 2.1、JVM线程概述 2.2、JVM系统线程 三、PC寄存器 3.1、寄存器概述 3.2、作用 3.3、常见问题 一、概述 1.1、数据区 内存是非常重要的系统资源&#xff0c;是硬盘和CPU的中间仓库及桥梁&#xff0c;承载着操…

vulnhub DC系列 DC-5

总结&#xff1a; 下载地址 DC-5.zip (Size: 521 MB)Download: http://www.five86.com/downloads/DC-5.zipDownload (Mirror): https://download.vulnhub.com/dc/DC-5.zip使用方法:解压后&#xff0c;使用vm直接打开ova文件。 漏洞利用 信息收集 这里还是使用DC-1的方法 1.给靶…

AR Foundation

AR Session 在一个AR应用中有且只允许存在一个AR Session 包括两个组件 &#xff1a;AR Session &#xff08;用于管理 Session&#xff09;、AR Input Manager (用于管理输入的一些信息) AR Session&#xff08;用于管理 Session&#xff09; 作用&#xff1a;管理AR应用状…

01.数据的存储

1. 数据类型介绍 1&#xff09;基本的内置类型&#xff1a;char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double //双精度浮点数 2&#xff09;类型的意义&#xff1a; 使用这个类型开辟内存空间的大小&#xff…

Docker快速入门自用笔记

1. Docker - 介绍 不同Linux的内核一致。 2. Docker - 与虚拟机的不同 3. Docker - Docker架构 镜像&#xff08;只读&#xff09;&#xff1a;应用程序及其所需依赖、函数库、环境、配置等文件打包在一起&#xff0c;称为镜像。 容器&#xff1a;镜像中的应用程序运行后…

一文看懂人机对话

人机对话概述 人机对话是指&#xff0c;让机器理解和运用自然语言实现人机通信的技术&#xff0c;如图1所示&#xff0c;通过人机对话交互&#xff0c;用户可以查询信息&#xff0c;如示例中的第一轮对话&#xff0c;用户查询天气信息&#xff0c;用户也可以和机器机型聊天&am…

Pytorch深度学习【十三】

LeNet网络 基本结构图 构造思路 先用卷积层来学习图片空间信息池化层降低敏感度全连接层来转换到类别空间 代码实现 import torch from torch import nn from d2l import torch as d2l class Reshape(nn.Module):def forward(self ,x):return x.view(-1, 1, 28, 28) # vie…

ElasticSearch7 Kibana集群安装

文章目录ElasticSearch安装下载安装包基础环境安装JDK安装修改Linux配置安装ES启动报错bootstrap check failure [1] of [1]: memory locking requested for elasticsearch process but memory is not lockedKibana安装Kibana简介Kibana下载Kibana安装ElasticSearch安装 下载安…

RS485接口电路设计

RS485接口是串口的一种&#xff0c;常常用在一些工业控制中&#xff0c;485通信是半双工的通信&#xff0c;一条总线最多可连接256个485设备。RS485信号速率最高可以到10Mbps&#xff0c;传输距离最大能到1000多米485接口包含一对差分信号A和B&#xff0c;如下图所示RS485标准规…

springcloud3 Nacos的集群搭建

一 nacos的集群搭建说明 1.1 版本选择的说明 本案例采用的版本是1.4.2 &#xff0c;当选用其他版本均有不同的问题&#xff1a; 1.4.4 nginx代理后&#xff0c;输入密码登录进去。 2.2.0 &#xff0c;2.1.2等 2.x版本均是 3个节点的启动之后&#xff0c;只能访问一个节点。…

David Murray 加入 VeraViews 担任需求总监

近日&#xff0c;VeraViews宣布任命 David Murray 为需求总监。 VeraViews 是一个旨在提供透明和可审计的无效流量 (IVT) 预防的广告技术平台&#xff0c;很高兴地宣布任命David Murray为 VeraViews 需求总监。 大卫是伦敦的一位商业专家&#xff0c;他在英国许多最大、商业上…

三种方式二叉树求从根到叶子结点的所有路径的方法整理

二叉树求从根到叶子结点的所有路径的方法整理 1. 利用递归和回溯方法求解 思路&#xff1a; 利用递归和回溯的方法求解 首先将当前结点加入到path中&#xff0c;然后判断是否为叶子结点&#xff0c;如果为叶子结点&#xff0c;则保存path路径如果不是叶子结点&#xff0c;则…

IDEA 开发工具

文章目录IDEA 开发工具一、IDEA 概述二、IDEA 下载和安装1. IDEA 下载2. IDEA 安装三、IDEA 中的第一个代码1. IDEA 项目结构介绍2. IDEA 中的第一个代码1&#xff09;创建 Project 项目2&#xff09;创建 Module 模块3&#xff09;创建 class 类4&#xff09;在类中编写代码5&…

C++指针

指针的基本概念 作用&#xff1a;通过指针间接访问内存。 内存编号从0开始&#xff0c;一般使用16进制表示。 可以利用指针变量保存地址。 指针变量定义和使用 数据类型*变量名 #include<iostream> using namespace std;int main(){//定义指针int a10;//指针定义语…

绕线机-排线伺服速度解算FC(比例随动编程应用)

绕线机模型和算法详细讲解,专栏已有几篇介绍文章,这篇属于补充和升华。在介绍这篇文章算法之前大家有必要了解什么是"随动系统"。相关链接如下: 绕线机机械结构相关介绍: S7-200 SMART PLC和V20变频器绕线机控制应用_RXXW_Dor的博客-CSDN博客_plc绕线机绕线机P…

循迹小车基本原理和代码实现

目录 一、循迹模块使用 二、接线方式 三、循迹小车原理 四、代码实现 一、循迹模块使用 1、TCRT5000传感器的红外发射二极管不断发射红外线&#xff0c;当发出的红外线没有被反射回来或被反射回来但强度不太够时&#xff0c;红外接收管一直处于关断状态&#xff0c;此时模…

将本地SpringBoot微服务制作成Docker Image镜像包然后运行

将本地SpringBoot微服务制作成Docker Image镜像包然后运行 文章目录将本地SpringBoot微服务制作成Docker Image镜像包然后运行1&#xff09;环境准备2&#xff09;验证jar包3&#xff09;制作images镜像包4&#xff09;注意1&#xff09;环境准备 准备一个SpringBoot项目&…