蓝桥杯19682 完全背包

问题描述

有 N 件物品和一个体积为 M 的背包。第 i 个物品的体积为 vi​,价值为 wi​。每件物品可以使用无限次。

请问可以通过什么样的方式选择物品,使得物品总体积不超过 M 的情况下总价值最大,输出这个最大价值即可。

输入格式

第一行输入两个正整数 N,M。(1≤N,M≤1000)

接下来 N 行,每行输入两个整数 vi,wi。(0≤vi,wi≤1000)

输出格式

输出一个整数,表示符合题目要求的最大价值。

样例输入

复制代码
4 5
1 2
2 4
3 4
4 5

样例输出

复制代码
10

说明

你可以选择 1 个第一个物品和 2 个第二个物品。

cpp 复制代码
#include<iostream>
#include<algorithm>
using namespace std;

const int N = 1e3+10;
int n, m;
int v[N], w[N];  
int dp[N];  //dp[j]表示背包容量为j时的最大价值

int main()
{
	cin>>n>>m;
	for(int i=1; i<=n; ++i) cin>>v[i]>>w[i];
	
	for(int i=1; i<=n; ++i)  //遍历每个物品
	{
		//内层循环从v[i]到m正向遍历,这使得同一物品可以被多次选取
		for(int j=v[i]; j<=m; ++j)
		{
			//dp[j]:不选当前物品
			//dp[j - v[i]] + w[i]:选当前物品
			dp[j] = max(dp[j], dp[j-v[i]] + w[i]);
		}
	}
	
	cout<<dp[m];
	
	return 0;
}
相关推荐
_OP_CHEN5 小时前
【算法基础篇】(三十一)动态规划之基础背包问题:从 01背包到完全背包,带你吃透背包问题的核心逻辑
算法·蓝桥杯·动态规划·背包问题·01背包·完全背包·acm/icpc
啊吧怪不啊吧11 小时前
算法王冠上的明珠——动态规划之路径问题(第一篇)
大数据·算法·贪心算法·动态规划
CoderYanger21 小时前
动态规划算法-01背包问题:50.分割等和子集
java·算法·leetcode·动态规划·1024程序员节
CoderYanger1 天前
动态规划算法-两个数组的dp(含字符串数组):48.最长重复子数组
java·算法·leetcode·动态规划·1024程序员节
冰西瓜6001 天前
动态规划(一)算法设计与分析 国科大
算法·动态规划
咨询QQ180809511 天前
牛场喂料机监控系统改造:从变量更名到通讯实现
动态规划
2401_841495642 天前
【LeetCode刷题】最大子数组和
数据结构·python·算法·leetcode·动态规划·最大值·最大子数组和
王老师青少年编程2 天前
背包DP第12课:多重背包DP应用案例实践1
c++·动态规划·dp·背包dp·多重背包·csp·信奥赛
roman_日积跬步-终至千里2 天前
【计算机算法与设计(5)】贪心法、分治法、动态规划的原理和问题求解
算法·动态规划·代理模式
滑稽的小Z2 天前
SP2530 GNY07H-Tiling a Grid With Dominoes 题解
c++·动态规划·题解