首页 > 其他分享 >0-1背包问题

0-1背包问题

时间:2024-11-30 19:58:48浏览次数:8  
标签:25 背包 int 41 问题 物品 include

给定n种物品(每种仅一个)和一个容量为c的背包,要求选择物品装入背包,使得装入背包中物品的总价值最大。

输入格式:

测试数据有多组,处理到文件尾。每组测试数据输入3行,第1行为两个整数n(1≤n≤400)和c (1≤c≤1500),分别表示物品数量与背包容量,第二行为n个物品的重量wi​(1≤i≤n),第三行为这n个物品的价值vi​(1≤i≤n)。物品重量、价值都为整数。

输出格式:

对于每组测试,在一行上输出一个整数,表示装入背包的最大总价值(结果保证在231−1范围内)。

输入样例:

4 9
2 3 4 5
3 4 5 7
25 100
42 6 48 13 38 124 8 17 41 25 41 26 47 41 171 25 7 30 35 7 17 32 45 27 38
49 19 53 40 22 4 36 20 49 25 61 48 67 34 57 52 46 45 33 41 20 38 34 58 63

输出样例:

12
292

出处:

HLOJ 1006

#include<bits/stdc++.h>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<limits.h>
using namespace std;
typedef long long  ll;
#define N 401  
#define M 1501
int n,c;
int i,j;
int dp[N][M];//dp方程含义表示当重量为c时从n个物品里任意取出物品的最大价值
int weight[N];
int worth[N];
int solve()
{
    for(i=0;i<=c;i++) dp[0][i]=0; //初始化0个物品的时候价值都是0
    for(i=1;i<=n;i++)//遍历物品
    {
        for(j=0;j<=c;j++)//遍历重量
        {
            if(j<weight[i])
                dp[i][j]=dp[i-1][j];
            else
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+worth[i]);
            //dp[i - 1][j - weight[i]] 为背包容量为j -weight[i]的时候不放物品i的最大价值,
            //那么dp[i - 1][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值
        }
    }
    return  dp[n][c];
}
int main()
{
    while(scanf("%d %d",&n,&c)!=EOF)
    {
        for(i=1;i<=n;i++) scanf("%d",&weight[i]);
        for(i=1;i<=n;i++) scanf("%d",&worth[i]);
        printf("%d\n",solve());
    }
}

 

标签:25,背包,int,41,问题,物品,include
From: https://blog.csdn.net/m0_74014534/article/details/144139169

相关文章

  • Android 应用测试的各种环境问题记录(Instrumentation测试)
    报错记录failedtoconfigurepackages targetSdkVersion(未解决)failedtoconfigurecom.demo.test.SettingsActivityTest.testOnCreate_withNullSavedInstanceState:PackagetargetSdkVersion=34>maxSdkVersion=32java.lang.IllegalArgumentException:failedtocon......
  • 采药(01背包)
    题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价......
  • 关于为前端连接数据库出现问题答案的寻找(404)
    根据个人前几天的错误查找情况来进行一个简单的说明(纯个人经验帖)问题描述:各个html或jsp页面都可以通过tomcat,从浏览器搜索进入,但是通过servlet来进行跳转会出现问题。排查步骤:我个人是又新开了一个项目,重新配置了一遍项目结构,使用的原来的源代码,问题依然存在;后通过浏览器搜索......
  • 关于Quartus的start按钮灰色无法下载的问题的解决
    Quartus的start按钮灰色可能一首先记得连接实验板并且添加.sof文件点击HardwareSetup选择USB-Blaster即可可能二如果上面的找不到USB-Blaster,可进入电脑的设备管理器,找到其他设备中的USB-Blaster选项右击更新驱动,注意选择相应路径更新完成后再次回到Quartus应该就可以......
  • Qt for Android的配置方法及遇到的常见问题
    一、QtforAndroid的配置方法:安装正确版本的JavaJDK(经测试,qt6.7.3版本对应于JavaJDK17),并在环境变量中进行添加,Windows控制台使用命令java--version可验证环境变量是否添加成功并查看安装的Java版本。在Qtcreator中进行配置:2.1配置JDK位置后,点击设置SDK可以自动下......
  • 国产化硬件系统上,部署视频监控平台系统软件出现的脚本问题解决
    目录一、问题描述二、解决方法        1、检查部署脚本权限        2、检查脚本中语法是否有问题        3、使用tee命令对文件进行修改        4、查看银河麒麟系统的安全设置        在国产系统银河麒麟硬件设备上部署视频......
  • Linux程序员解决程序崩溃的问题
    Linux程序员解决程序崩溃的问题1.引言嘿,各位程序员小伙伴们!你们是否曾经遇到过程序突然“跑路”崩溃的情况?是不是觉得那一刻就像被一只无形的手拍在了脑门上,整个人都懵了?别担心,今天我们就来聊聊如何像侦探一样追查程序崩溃的真相,让你的代码更加坚不可摧!2.程序崩溃的常......
  • USB无法识别设备?USB驱动问题解析篇
    今天我们来讲解的是USB驱动问题,连接USB无法识别模组设备,是不是驱动问题?今天就一起来聊聊如何排查解决。注意:本文涉及的内容都是基于Windows系统,且不低于Win7版本;Linux/Mac/UNIX/低版本的Windows,不在本文涉及范围之内。一、哪些模组需要安装USB驱动可根据下方分类判断自己手中的......
  • 【VMware VCF】解决还原 SDDC Manager 备份后无法显示映像管理中的可用映像问题。
    之前通过备份的配置文件还原SDDCManager组件之后发现有个问题,导航到生命周期管理->映像管理,在“可用的映像”管理视图中无法正常显示所有的映像,并出现如下图所示的错误。尝试测试导入新的映像到SDDCManager中,任务也能正常完成,但是始终无法在可用的映像中正常显示。检索映像......
  • 修复 Docker Ubuntu 容器中 Tab 自动补全与上下键历史命令失效问题
    1简介在使用Docker容器运行Ubuntu系统时,有时会遇到Tab键自动补全和上下键历史命令失效的问题。这通常是由于终端模拟器的设置不当引起的。2解决方案2.1安装bash-completebash-completion是一个增强的命令补全工具,能够为许多常用的命令提供智能补全。这在复杂的命令行操作......