OpenJudge_ 简单英文题_04:0/1 Knapsack

news2024/11/15 0:42:35

题目

描述
Given the weights and values of N items, put a subset of items into a knapsack of capacity C to get the maximum total value in the knapsack. The total weight of items in the knapsack does not exceed C.

输入
First line: two positive integers N (N <= 100) and C (C <= 1000).
Second line: N positive integers w[i] (w[i] <= 1000), indicating the weight of the i-th item.
Third line: N positive integers v[i] (v[i] <= 1000), indicating the value of the i-th item.
输出
One line contains several integers, indicating the indexes of the selected items.
样例输入
5 10
2 4 6 2 5
1 3 4 2 8
样例输出
2
5

翻译

题目:
0/1背包
描述:
给定N个物品的权重和值,将一个子集的物品放入容量为C的背包中,以获得背包中的最大总值。背包中物品的总重量不超过C。
输入:
第一行:两个正整数N(N<=100)和C(C<=1000)。
第二行:N个正整数w[i](w[i]<=1000),表示第i个项目的权重。
第三行:N个正整数v[i](v[i]<=1000),表示第i项的值。
输出:
一行包含几个整数,表示所选项目的索引。

代码

#include <bits/stdc++.h>
using namespace std;
int n,//物品数量
c,//背包容量
w[1001],//每物品重量
v[1001],//每物品价值
f[101][1001];//多少重量时对应的最大价值
/*
f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]);
f[几个物品][重量]=最大(f[不要该物品][同样重量],f[不要该物品][重量-该物品重量]+该物品价值);
没有该重量时的最大价值+该物品价值。
*/
struct node{
int i,j;
}p[101][1001]; //该物品的上个物品
void view(){//观察数据
cout<<“数据:\n”;
cout<<“重量\t\t”;for(int j=0;j<=c;j++)cout<<j<<“\t”;cout<<endl;
for(int i=1;i<=n;i++){
cout<<i<<“:\t”<<w[i]<<“,”<<v[i]<<“\t”;for(int j=0;j<=c;j++)cout<<f[i][j]<<“\t”;cout<<endl;
cout<<“\t\t”;for(int j=0;j<=c;j++)cout<<p[i][j].i<<“,”<<p[i][j].j<<“\t”;cout<<endl;
}
cout<<endl;
}
int main(){
//freopen(“data.cpp”,“r”,stdin);
cin>>n>>c;
//cout<<“物品数量”<<n<<“\t背包容量”<<c<<endl;
for(int i=1;i<=n;i++)cin>>w[i];
for(int i=1;i<=n;i++)cin>>v[i];
for(int i=1;i<=n;i++)//行,各物品
for(int j=0;j<=c;j++){//列,每重量
f[i][j]=f[i-1][j];//该重量时能取得的最大价值可以初步认定为不用该物品就取得的最大价值
p[i][j]=node{i-1,j};
if(j>=w[i])//如果重量超过该物品的重量,可以考虑用该物品
if(f[i][j]<f[i-1][j-w[i]]+v[i]){//不用该物品(i-1)不算该物品重量(j-w[i])时取得的最大价值上+该物品的价值
f[i][j]=f[i-1][j-w[i]]+v[i];
p[i][j]=node{i-1,j-w[i]};
}
}
//view();
stack s;
int pi=n,pj=c;
while(f[pi][pj]!=0){//只要有价值就算
node px=p[pi][pj];//找到前一状态
if(pj!=px.j)s.push(pi);//如果两状态的重量一样就不算。
pi=px.i,pj=px.j;
}
while(!s.empty()){//逆序输出采用的各物品
cout<<s.top()<<endl;s.pop();
}
return 0;
}

小结

动态规划就怕画表格,画完表格就清楚了。
初始状态是怎样,随着阶段的变化状态怎样变化。
然后就能找到动态转移方程。

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

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

相关文章

WLAN消失或者已连接但是访问不了互联网

目录 1、WLAN已连接但是访问不了互联网 2、WLAN图标消失 今晚电脑突然连不上网了&#xff0c;重启试了好多种办法都没有用。 1、WLAN已连接但是访问不了互联网 这个的问题很多&#xff0c;建议直接网络重置&#xff0c;即将网络驱动全部删除&#xff0c;然后重新安装。 首先…

Python学习从0到1 day26 第三阶段 Spark ④ 数据输出

半山腰太挤了&#xff0c;你该去山顶看看 —— 24.11.10 一、输出为python对象 1.collect算子 功能: 将RDD各个分区内的数据&#xff0c;统一收集到Driver中&#xff0c;形成一个List对象 语法&#xff1a; rdd.collect() 返回值是一个list列表 示例&#xff1a; from …

机器学习在网络安全中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 机器学习在网络安全中的应用 机器学习在网络安全中的应用 机器学习在网络安全中的应用 引言 机器学习概述 定义与原理 发展历程 …

JMeter进阶篇

目录 上篇导航&#xff1a; 总目录&#xff1a; 一、逻辑控制器&#xff1a; 1.逻辑控制器和关联&#xff1a; 2.if逻辑控制器&#xff1a; 3.forEach控制器&#xff1a; 4.循环控制器&#xff1a; 二、关联&#xff1a; 1.xpath&#xff1a; 2.正则表达式提取器&…

O-RAN简介

O-RAN简介 概览 如今,全球蜂窝数据使用量持续增长,因此,电信系统必须随之进行革新,才能满足这一需求量。虽然5G标准能够满足更高的蜂窝吞吐量需求,且有望实现各种新的应用场景,但如果网络没有进行相应的改进,许多拟定的5G应用只能是纸上谈兵。以高可靠低延时通信(URLL…

Spring设计模式

设计模式 是一种软件开发中的解决方案&#xff0c;设计原则。目的是使代码具有扩展性&#xff0c;可维护性&#xff0c;可读性&#xff0c;如&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09; Spring IoC 容器默认会将 Bean 创建为单例&#xff0c;保证一个类…

安全的时钟启动

Note&#xff1a;文章内容以 Xilinx 系列 FPGA 进行讲解 1、什么是安全启动时钟 通常情况下&#xff0c;在MMCM/PLL的LOCKED信号抬高之后&#xff08;由0变为1&#xff09;&#xff0c;MMCM/PLL就处于锁定状态&#xff0c;输出时钟已保持稳定。但在此之前&#xff0c;输出时钟会…

【含开题报告+文档+PPT+源码】基于Springboot和vue的电影售票系统

开题报告 随着电影产业的快速发展和科技的不断进步而逐渐形成的。在早期&#xff0c;电影票的销售主要依赖于传统的实体售票窗口和人工售票员&#xff0c;这种方式虽然直接&#xff0c;但效率低下&#xff0c;容易出现错误&#xff0c;并且无法满足大规模、高流量的售票需求。…

5G的发展演进

5G发展的驱动力 什么是5G [远程会议&#xff0c;2020年7月10日] 在来自世界各地的政府主管部门、电信制造及运营企业、研究机构约200多名会议代表和专家们的共同见证下&#xff0c;ITU-R WP 5D#35e远程会议宣布3GPP 5G技术&#xff08;含NB-IoT&#xff09;满足IMT-2020 5G技…

Vue全栈开发旅游网项目(11)-用户管理前端接口联调

联调基本步骤 1.阅读接口文档 2.配置接口地址 3.使用axios获取数据 4.将数据设置到模型层 1.发送验证码联调 1.1 配置接口地址 文件地址&#xff1a;src\utils\apis.js //系统相关的接口 const SystemApis {sliderListUrl:apiHost"/system/slider/list/",//发送…

接口返回的结构体里包含图片(做图片预览)

摘要&#xff1a;有这么一种情况&#xff0c;页面上有一块儿内容是接口返回的&#xff0c;前端做渲染&#xff0c;比如 <div><p><img srcxxx /></p><p>测试</p> </div> 这是接口返回的字符串结构数据&#xff0c;这时候需要前端做…

免费,WPS Office教育考试专用版

WPS Office教育考试专用版&#xff0c;不仅满足了考试需求&#xff0c;更为教育信息化注入新动力。 https://pan.quark.cn/s/609ef85ae6d4

aws中AcmClient.describeCertificate返回值中没有ResourceRecord

我有一个需求&#xff0c;就是让用户自己把自己的域名绑定我们的提供的AWS服务器。 AWS需要验证证书 上一篇文章中我用php的AcmClient中的requestCertificate方法申请到了证书。 $acmClient new AcmClient([region > us-east-1,version > 2015-12-08,credentials>[/…

ctfshow-web入门-反序列化(web271-web278)

目录 1、web271 2、web272 3、web273 4、web274 5、web275 6、web276 7、web277 8、web278 laravel 反序列化漏洞 1、web271 laravel 5.7&#xff08;CVE-2019-9081&#xff09; poc <?php namespace Illuminate\Foundation\Testing{use Illuminate\Auth\Generic…

程序员的数学之进制与零

最近一年多发生了很多平凡的大事&#xff0c;应接不暇&#xff0c;一度断更。从今儿起再接上来。 先从数学开始吧&#xff0c;因为太枯燥了。 生活中有许多种进制在共同起作用&#xff0c;例如&#xff0c;数学上的十进制、计算机中的二进制、八进制和十六进制、计时的60进制、…

GPT-5 要来了:抢先了解其创新突破

Microsoft 的工程师计划于 2024 年 11 月在 Azure 上部署 Orion (GPT-5)。虽然这一版本不会向公众开放&#xff0c;但其上线被视为人工智能领域的一个重要里程碑&#xff0c;并将产生深远的影响。 文章目录 GPT-5 真的要来了GPT-4 的局限性GPT-5 的创新突破与遗留挑战GPT-5 预期…

01-Ajax入门与axios使用、URL知识

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

堆中的时间复杂度+TOP K问题

堆中的时间复杂度分析 回顾: 堆在物理上:数组 逻辑上:完全二叉树 1.堆排序是什么? // 排升序void HeapSort(int* a, int n){// 建大堆 -for (int i (n - 1 - 1) / 2; i > 0; --i){AdjustDown(a, n, i);}int end n - 1;while (end > 0){Swap(&a[0], &a[end]…

学Linux的第八天

目录 管理进程 概念 程序、进程、线程 进程分类 进程前后台调用 查看进程 ps命令 unix 风格 bsd风格 GNU风格 top命令 格式 统计信息区 进程信息区&#xff1a;显示了每个进程的运行状态 kill命令 作用 格式 管理进程 概念 程序、进程、线程 程序&#x…

网络初识--Java

一、网络通信基础 1.IP地址 IP地址主要⽤于标识⽹络主机、其他⽹络设备&#xff08;如路由器&#xff09;的⽹络地址。简单说&#xff0c;IP地址⽤于定位主 机的⽹络地址。 就像我们发送快递⼀样&#xff0c;需要知道对⽅的收货地址&#xff0c;快递员才能将包裹送到⽬的地。…