来自采药的某题解
for(int i=1;i<=n;i++)
{
for(int j=t;j>=w[i];j--){ //t为背包总容量
}
}
为什么要从t开始枚举呢?
因为我们的每个物品只能放一次,而f[j]要靠f[j-w[j]]的价值求出来,如果我们先枚举f[j]再枚举f[j]以后的内容,就会被f[j]影响到,也就相当于第i件物品放了两次或以上(这涉及到完全背包问题,需要了解的可以去百度一下,或者做一下P1616)。所以我们从t开始枚举,以免影响到之前的f[i]。
这段话没有看懂aa
为什么要从t开始枚举呢?
因为我们的每个物品只能放一次,而f[j]要靠f[j-w[j]]的价值求出来,如果我们先枚举f[j]再枚举f[j]以后的内容,就会被f[j]影响到,也就相当于第i件物品放了两次或以上(这涉及到完全背包问题,需要了解的可以去百度一下,或者做一下P1616)。所以我们从t开始枚举,以免影响到之前的f[i]。
所以到底为什么要从t开始嗷