当前位置: 首页 > news >正文

1267:【例9.11】01背包问题


时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。

【输入】

第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);

第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。

【输出】

仅一行,一个数,表示最大总价值。

【输入样例】

10 4 2 1 3 3 4 5 7 9

【输出样例】

12
#include <bits/stdc++.h> using namespace std; int m,n; int w[201],c[31]; int D1(int mx){//普通版 未空间优化 int dp[31][201]; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ for(int j=1;j<=mx;j++){ dp[i][j]=dp[i-1][j];//第i个物品不取 if(j>=w[i])dp[i][j]=max(dp[i][j],dp[i-1][j-w[i]]+c[i]);//取第i个物品 } } return dp[n][mx]; } int D2(int mx){//空间优化 int a[201];//用a[j] 替换原来的 dp[i-1][j] int b[201];//用b[j] 替换原来的 dp[i][j] memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(int i=1;i<=n;i++){ for(int j=1;j<=mx;j++){ b[j]=a[j];//第i个物品不取 if(j>=w[i])b[j]=max(b[j],a[j-w[i]]+c[i]);//取第i个物品 } for(int j=1;j<=mx;j++)a[j]=b[j]; } return b[mx]; } int D3(int mx){//空间优化 int b[201];//用b[j] 替换原来的 a[j] 和 b[j] memset(b,0,sizeof(b)); for(int i=1;i<=n;i++){ //因为要用去 b[j-w[i]] 的数据,所以要倒序遍历 ,正序的话新数据就覆盖之前的数据了 for(int j=mx;j>=0;j--){ //b[j]=b[j];//第i个物品不取 if(j>=w[i])b[j]=max(b[j],b[j-w[i]]+c[i]);//取第i个物品 } } return b[mx]; } int factorial(int i,int mx){//动态规划 递归写法 if(i==0 || mx==0)return 0; int xx=factorial(i-1,mx);//第i个物品不取 if(mx>=w[i])xx=max(xx,factorial(i-1,mx-w[i])+c[i]);//取第i个物品 return xx; } int main(int argc, char** argv) { scanf("%d%d",&m,&n); for(int i=1;i<=n;i++){ scanf("%d%d",&w[i],&c[i]); } //printf("%d",D1(m));//普通版 未空间优化 //printf("%d",D2(m));//空间优化 //printf("%d",D3(m));//空间优化 printf("%d",factorial(n,m));//动态规划 递归写法 return 0; }
http://www.jsqmd.com/news/535865/

相关文章:

  • Multisim新手必看:5分钟搞定稳压二极管仿真实验(附限流电阻计算技巧)
  • 当GNN推荐遇上业务冷启动:我们如何在电商新用户场景下把点击率提升了15%
  • 电容计算实战:从平行板到球形电容器的5种常见模型解析
  • 【Java并发】CompletableFuture常问题目
  • 人机协作新范式:盘点2026年全网爆红的AI论文写作工具
  • STM32CubeIDE开发环境解析与实战指南
  • 【西安工业大学主办,SAE(美国工程师学会)出版,有ISSN号!EI,scopus双检索,往届已检索 | 智慧交通与未来出行领域EI会议征稿】第二届智慧交通与未来出行国际学术会议(ITFM 2026)
  • 手把手教你把grok-code-fast-1集成到VSCode:打造你的专属‘代理式’编程助手(附避坑指南)
  • 太赫兹市场预测:至2032年这一数字将攀升至接近144.8亿元
  • 终极指南:如何使用GDLauncher轻松管理你的Minecraft游戏体验
  • 在家用电脑跑AI大模型?Unsloth开源项目让普通用户也能轻松实现,算力民主化时代即将来临!
  • 深入HAL库:拆解STM32的UART DMA空闲中断接收机制,如何自己实现双缓冲与数据帧管理
  • C语言实现面向对象编程的核心方法与实践
  • 南京理工大学LaTeX论文模板实战:从编译到排版的十二个典型问题与解决方案
  • Win10环境实战:8812BU网卡驱动与Omnipeek抓包平台搭建全指南
  • 2026医药gmp审计服务机构选购指南:gmp审计/gmp认证/tga注册/药品注册/药品认证/选择指南 - 优质品牌商家
  • 专业音频工具排行 | 迅捷音频转文字介绍
  • 嵌入式C++泛型单向链表:零分配、缓存优化的LinkedList库
  • 不懂XPath也能玩转自动化?用Midscene.js实现无代码网页操作(含电商爬虫案例)
  • 拯救者工具箱终极指南:5个简单步骤让你的游戏本性能翻倍
  • Ryven:Python数据流可视化编程工具 - 开发者的效率革命解决方案
  • 为什么你的鸿蒙分布式能力不好用?
  • 从物流仓库到游戏背包:三维装箱问题(3D-BPP)如何影响你的日常生活?
  • 如何利用LoRA高效微调Qwen3 Reranker模型?
  • 工业通信协议实战指南:基于lib60870的IEC 60870-5协议深度应用
  • 嵌入式系统资源管理的七条核心法则
  • 3分钟掌握Android系统精简神器:Universal Android Debloater终极指南
  • Chat模型微调实战:基于AI辅助开发的高效调参指南
  • 嵌入式CMake工程化实践指南
  • 如何通过智能配置实现监控系统的成本控制与效能提升:企业级优化指南