我不想写作业orz
T1
肯定打表找规律,画完哈夫曼树长这样。

于是哈夫曼编码如下。
- a:a:a: 000000000000 000100010001
- b:b:b: 000000000000 001001001
- c:c:c: 000000000000 010101
- d:d:d: 000000000000 111
- e:e:e: 000100010001
- f:f:f: 001001001
- g:g:g: 010101
- h:h:h: 111
然后拿眼找规律即可,对于数值是Fibonacci[i](从1开始)Fibonacci[i](从1开始)Fibonacci[i](从1开始),其哈夫曼编码是
Codei={n−1个"0"i=1(n−i)个"0"+"1"i>1Code_i = \begin{cases}
n-1个"0"&i=1\\
(n-i)个"0"+"1"&i>1
\end{cases}Codei={n−1个"0"(n−i)个"0"+"1"i=1i>1
T2
肯定前面的物品更优,一直拿就是了。假设拿了第jjj件而没有拿第iii件,其中(i<j)(i <j)(i<j),那么肯定有Weighti<Weightj,Valuei>ValuejWeight_i < Weight_j,Value_i > Value_jWeighti<Weightj,Valuei>Valuej。此时我们将第jjj件拿出来换成第iii件,显然可以得到更多的价值和更多的容量,因此贪心选择性质得证。
T3
不能,只能利用回溯法爆搜所有的装载顺序才能得到结果,若是还采用原来的策略,先PickPickPick最轻的塞进第一艘船然后再塞第二艘船感性理解上都不对。(话说最优装载问题是啥我都不知道,百度了一下才知道是价值全部为1的01背包
直接举反例,两艘船C1=C2=4C_1=C_2=4C1=C2=4,四件物品重量1,2,2,31,2,2,31,2,2,3,按照原来的策略则第一艘船塞进了1,21,21,2,第二艘船塞进了222。显然应该1,31,31,3和2,22,22,2来分比较合理,有反例就不用证了
T4
神必的一批,看不太懂贪心,积化和到是网络流见过一次orz
洛谷P1249题解好吧,下面伪代码
forforfor i=1i =1i=1 tototo nnn dododo
forforfor j=nj =nj=n tototo 111 dododo
ififif dp[j−i]+ln(i)>dp[j]dp[j-i] +ln(i) > dp[j]dp[j−i]+ln(i)>dp[j] thenthenthen
dp[j]←(dp[j−i]+ln(i))dp[j] \leftarrow (dp[j-i]+ln(i))dp[j]←(dp[j−i]+ln(i))
choose[j]←(j−i)choose[j] \leftarrow (j-i)choose[j]←(j−i)
endifendifendif
endendend forforfor
endendend forforfor
answer←1answer \leftarrow 1answer←1
position←choose[n]position \leftarrow choose[n]position←choose[n]
whilewhilewhile position>0position > 0position>0 dododo
answer←answer⋅positionanswer \leftarrow answer \cdot positionanswer←answer⋅position
position←choose[position]position \leftarrow choose[position]position←choose[position]
endendend whilewhilewhile
01背包时间复杂度O(n2)O(n^2)O(n2)

本文探讨了哈夫曼编码的构造过程,并通过实例展示了其规律。同时,文章分析了贪心算法在01背包问题中的应用,证明了贪心选择性质。此外,还通过反例说明在最优装载问题中,简单的贪心策略并不适用,需要借助回溯法。最后,介绍了动态规划解决某特定问题的伪代码。
1653

被折叠的 条评论
为什么被折叠?



