c++【提高】简单背包问题

时间限制 : 1 秒

内存限制 : 128 MB

有一个背包能装的重量 maxw (正整数,0≤maxw≤20000),同时有 n 件物品(1≤n≤100),每件物品有一个重量 w_i(正整数)和一个价值 p_i(正整数)。要求从这 n 件物品中任取若干件装入背包内,使背包的物品价值最大。

输入

第 1 行:背包最大载重 maxw,物品总数 n ;

第 2 行到第 n+1 行:每个物品的重量和价值;

输出

一个数字即背包内物品最大价值;

样例
输入
复制代码
10 3
4 5
3 4
6 9
输出
复制代码
14
来源

动态规划 背包问题

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int v,n;
int w[105],p[105];
int dp[105][20005];
int main()
{
	cin>>v>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>w[i]>>p[i];
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=v;j++)
		{
			if(w[i]<=j)
			{
				dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+p[i]);
			}
			else
			{
				dp[i][j]=dp[i-1][j];
				
			}
		}
	}
	cout<<dp[n][v];
	return 0;
}

优化后:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int v,n;
int w[105],p[105];
int dp[20005];
int main()
{
	cin>>v>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>w[i]>>p[i];
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=v;j>=w[i];j--)
		{
			dp[j]=max(dp[j],dp[j-w[i]]+p[i]);
		}
	}
	cout<<dp[v];
	return 0;
}

​
相关推荐
m0_5191964018 分钟前
【设计模式】java的习题
开发语言·python
王老师青少年编程28 分钟前
2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷(汇总)
c++·模拟卷·2026年·青少年信息素养大赛·算法应用主题赛·决赛
我命由我1234529 分钟前
Jetpack Compose - Material Design 断点范围、WindowSizeClass、针对不同屏幕尺寸创建预览、四类导航栏
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
captain3761 小时前
多线程进阶
java·开发语言·数据库
思麟呀1 小时前
C++(八):文件系统库+并行算法
开发语言·c++
郑州光合科技余经理7 小时前
代驾系统架构拆解:订单链路、权限组织与私有化源码交付
开发语言·后端·算法·架构·系统架构·uni-app·php
码哥DFS10 小时前
二叉树的直径
开发语言·javascript·算法
paopaokaka_luck11 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
梦雨生生12 小时前
java开发工具(学习第一天)
java·开发语言·学习
啊啊啊啊啊!!!!13 小时前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++