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 }
复制代码

 

posted @   Lorazepam  阅读(164)  评论(0编辑  收藏  举报
编辑推荐:
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
阅读排行:
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
点击右上角即可分享
微信分享提示