题解
2026-02-01 17:27:48
发布于:广东
9阅读
0回复
0点赞
经典01背包问题
第一篇题解,请多指教
时间复杂度:O( nm )
空间复杂度:O( n )
#include<iostream>
using namespace std;
int n,dp[30005],m,w,v;//dp[i]表示花i元时最大价值为多少;
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>w>>v;
for(int j=n;j>=w;j--) dp[j]=max(dp[j],dp[j-w]+w*v);//从后向前遍历,防止重复计算;
}
cout<<dp[n];//最后只要输出dp[n],因为前面遍历不管有没有花够n元都会叠加到dp[n]上;
return 0;//养成好习惯!!!;
}
这里空空如也

有帮助,赞一个