01背包问题 第二个循环为什么是for (int v = V; v >= c[i]; --v)for (int v = V; v >= c[i]; --v) //c[i]可优化为bound,bound = max {V - sum c[i,...n],c[i]}  {  f[v] = (f[v] > f[v - c[i]] + w[i] f[v] :f[v - c[i]] + w[i]);  }百

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 05:08:09
01背包问题 第二个循环为什么是for (int v = V; v >= c[i]; --v)for (int v = V; v >= c[i]; --v) //c[i]可优化为bound,bound = max {V - sum c[i,...n],c[i]}  {  f[v] = (f[v] > f[v - c[i]] + w[i] f[v] :f[v - c[i]] + w[i]);  }百

01背包问题 第二个循环为什么是for (int v = V; v >= c[i]; --v)for (int v = V; v >= c[i]; --v) //c[i]可优化为bound,bound = max {V - sum c[i,...n],c[i]}  {  f[v] = (f[v] > f[v - c[i]] + w[i] f[v] :f[v - c[i]] + w[i]);  }百
01背包问题 第二个循环为什么是for (int v = V; v >= c[i]; --v)
for (int v = V; v >= c[i]; --v) //c[i]可优化为bound,bound = max {V - sum c[i,...n],c[i]}
  {
  f[v] = (f[v] > f[v - c[i]] + w[i] f[v] :f[v - c[i]] + w[i]);
  }
百度百科上
循环条件为什么是for (int v = V; v >= c[i]; --v)
f[v]表示的是什么?

01背包问题 第二个循环为什么是for (int v = V; v >= c[i]; --v)for (int v = V; v >= c[i]; --v) //c[i]可优化为bound,bound = max {V - sum c[i,...n],c[i]}  {  f[v] = (f[v] > f[v - c[i]] + w[i] f[v] :f[v - c[i]] + w[i]);  }百
学习精神不错
f[v]是表示包容量为v时候的价值
你的追问中有理解错误:
那么第i个物品不放的价值,肯定小于第i个物品放的价值啊?
一般理解这是正确的,但是这是一个有容量限制的问题,要是前面已经满了的话可能第i个物品再也放不进去啊,这样你的理解就错了
思路:
包的容量为v吧,第i个物品体积c[i],价值w[i],f[v]表示包容量为v时候能够装的价值
现在第i个物品还没有装:f[v]表示包中装的前i-1个物品的价值
我要装i物品的话:它占用了c[i]的容量,获得w[i]价值,那么前面的i-1个物品就只能占用v-c[i]的空间,否则现在就装不下.
这样如果装i的话,利益就是f[v-c[i]]+w[i]
所以要比较装i的价值f[v-c[i]]+w[i]和不装i的价值f[v]
你说不用比较,但你想想:v的容量装前i-1个物品的价值肯定要大于等于v-c[i]的容量装的i-1个物品吧,这样f[v-c[i]]

01背包问题 第二个循环为什么是for (int v = V; v >= c[i]; --v)for (int v = V; v >= c[i]; --v) //c[i]可优化为bound,bound = max {V - sum c[i,...n],c[i]}  {  f[v] = (f[v] > f[v - c[i]] + w[i] f[v] :f[v - c[i]] + w[i]);  }百 动态规划,0-1背包问题在背包问题九讲中p01 01背包中有这样一段话:一个常数优化前面的伪代码中有 for v=V..1,可以将这个循环的下限进行改进.由于只需要最后f[v]的值,倒推前一个物品,其实只 动态规划的01背包问题,来自背包九讲上的一段:-------------------------------------------------------------------------------------------------------有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i 什么是背包客? 两个for语句,在循环时如何跳出第二个for语句进入第一个for语句? C语言中的for循环能省去第二个表达式吗?请给出一个例子! for循环中第二个表达式的条件表达式有哪些类型? 第二题 为什么是4个密码子 输入一个整数,求输出小于等于该数的所有素数,C语言问题.看看哪出问题了..不能用两个for循环解决么?我这么写之后总是不对,调试的时候发现第二个for循环总是不循环啊,结果导致很多不是素 输入一个整数,然后输出小于等于该数的所有素数,C语言问题.不能用两个for循环解决么?我这么写之后总是不对,调试的时候发现第二个for循环总是不循环啊,结果导致很多不是素数的也跑进来了 quick basic一个for循环语句问题for i= 1 to 10print i;nextprintfor i= 1 to 10s=s+inextprint s=;send第二个print有什么用, C# 分支定界法 01背包问题用C#编程通过分支定界法解决背包问题.急. 贪心算法背包问题设有n=8个体积分别为54,45,43,29,23,21,14,1的物体和一个容积为C=110的背包,问选择哪几个物体装入背包可以使其装的最满 C/c++程序 for(; ;)为什么是死循环呢,请知道的详解,谢谢. break的具体用法main..{.for.当遇到break时是只退出第二个循环还是两个发循环都{for.退出..break}.}还想再问你个问题为什么我按书上写的输入到C中时不能执行呢能给我简单说下C平台的使用吗谢谢 C程序中,for循环语句中的第二个表达式中能否有关系表达式 希望能给出个例子 求函数极限问题,谁能告诉我第二个等号开始为什么是错误的?正确的怎么算? 要使以下for循环执行20次,循环变量的初值是for i=初值:2:100答案为什么是61或62?