这道题是一个01背包的模板题,之前我发过01背包的博客
这里咱们就用最优版本来说,奉上代码:
#include<bits/stdc++.h>
using namespace std;
const int INF = 1e8;
int dp[INF],w[INF],c[INF];//w = v表示物品价值,c = p表示物品的重要度
int main()
{
int v,n;
cin >> v >> n;//v = n表示总钱数,n = m表示物品个数
for(int i = 1;i <= n;i++)
{
cin >> w[i] >> c[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]] + w[i] * c[i]);
}
}//上面是01背包的模板,只不过按照题意,要把v和p的积求出来max
cout << dp[v];//表示在容量为v的房间里产生的最大价值和重要度的积
return 0;
}