01背包
问题描述
有n个重量和价值分别为wi, vi的物品, 从这些物品中挑选出总重量不超过W的物品吗,求所有挑选方案中价值总和的最大值
限制条件
1 <= n <= 100
1 <= w1, v1 <= 100
1 <= W <= 10000
定义数组dp[i][j] : 前i件物品(不含) 重量不超过j 所能取得的最大价值
状态转移方程
dp[i+1][j] = max( dp[i][j], dp[i][j-w[i]] + v[i] )
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 5 using namespace std; 6 7 struct Bag 8 { 9 int w, v; 10 }bag[128]; 11 12 int main() 13 { 14 freopen("in.txt", "r", stdin); 15 int n, W; 16 scanf("%d", &n); 17 for (int i = 0;i < n; i++) 18 { 19 scanf("%d%d", &bag[i].w, &bag[i].v); 20 } 21 scanf("%d", &W); 22 int dp[128][128]; 23 memset(dp, 0, sizeof(dp)); 24 for (int i = 0; i < n; i++) 25 { 26 for (int j = W; j >= bag[i].w; j--) 27 { 28 dp[i+1][j] = max(dp[i][j], dp[i][j-bag[i].w]+bag[i].v); 29 } 30 } 31 printf("%d\n", dp[n][W]); 32 return 0; 33 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密