完全背包代码模板

注意j是从前往后开始遍历的,不可以倒过来遍历。原因如下:

完全背包代码模板_第1张图片 

 上方图片上二维状态,i表示第几个物品,j表示背包的多剩下的容量。

ll m, n; cin >> m >> n;
for (int i = 1; i <= n; ++i) cin >> w[i] >> v[i];

for (int i = 1; i <= n; ++i)
{
	for (int j = v[i]; j <= m; ++j)
	{
		//区别是从自己转移过来的
		dp[j] = max(dp[j], dp[j - v[i]] + w[i]);
	}
}

cout << dp[m];

你可能感兴趣的:(算法,数据结构)