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;
}

​
相关推荐
坤坤子吖2 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢2 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型
一条大祥脚3 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
·present·3 小时前
CSAPP(lecture 13_02 Linking)
c语言·c++
FRing034 小时前
vue2干货总结8(路由模块封装、router-link、声明式导航、路由重定向、编程式导航)
开发语言·前端·vue.js·vue2
旖旎夜光4 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
starzy19904 小时前
深入理解Scala嵌套函数:作用域封装之道
开发语言·scala
Sakura_j_h_5 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
青少儿编程课堂6 小时前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛