关于背包问题的答案
  • 板块学术版
  • 楼主D2T1xubiaoshi
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/5/7 22:18
  • 上次更新2023/11/4 23:34:09
查看原帖
关于背包问题的答案
390770
D2T1xubiaoshi楼主2021/5/7 22:18

rt

这是一份01背包模板

for(int i=0; i<n; ++i){
	scanf("%d%d",&v,&w);
	for(int j=V; j>=v; --j)
		dp[j]=std::max(dp[j],dp[j-v]+w);
}

其中 dp[k,w]dp[k,w] 应该表示前 kk 个物品填满 ww 的空间所获得的最大收益(第一维已滚掉,以下的 dpdp 数组都为滚掉后的),所以答案应该取 max(dp[1V])max(dp[1 \sim V])VV 为背包容量)。

但是,我直接使用了 dp[V]dp[V] 作为答案,通过了众多背包板子题: P1048 P1616 P1776 P1855

有的dalao说我能过是因为数据水,直接取 dp[V]dp[V] 可能被卡,且lyd的蓝书也取了 max(dp[1V])max(dp[1 \sim V])

所以,直接取 dp[V]dp[V] 是正确的吗?如果是正确有没有证明?如果错误可不可以给出一个hack数据?

2021/5/7 22:18
加载中...