BIT算法作业四-贪心

我不想写作业orz在这里插入图片描述
T1

 肯定打表找规律,画完哈夫曼树长这样。
在这里插入图片描述
于是哈夫曼编码如下。

  • a : a: a: 0000 0000 0000 0001 0001 0001
  • b : b: b: 0000 0000 0000 001 001 001
  • c : c: c: 0000 0000 0000 01 01 01
  • d : d: d: 0000 0000 0000 1 1 1
  • e : e: e: 0001 0001 0001
  • f : f: f: 001 001 001
  • g : g: g: 01 01 01
  • h : h: h: 1 1 1

然后拿眼找规律即可,对于数值是 F i b o n a c c i [ i ] ( 从 1 开 始 ) Fibonacci[i](从1开始) Fibonacci[i](1),其哈夫曼编码是
C o d e i = { n − 1 个 " 0 " i = 1 ( n − i ) 个 " 0 " + " 1 " i > 1 Code_i = \begin{cases} n-1个"0"&i=1\\ (n-i)个"0"+"1"&i>1 \end{cases} Codei={n1"0"(ni)"0"+"1"i=1i>1

T2

 肯定前面的物品更优,一直拿就是了。假设拿了第 j j j件而没有拿第 i i i件,其中 ( i < j ) (i <j) (i<j),那么肯定有 W e i g h t i < W e i g h t j , V a l u e i > V a l u e j Weight_i < Weight_j,Value_i > Value_j Weighti<Weightj,Valuei>Valuej。此时我们将第 j j j件拿出来换成第 i i i件,显然可以得到更多的价值和更多的容量,因此贪心选择性质得证。

T3

 不能,只能利用回溯法爆搜所有的装载顺序才能得到结果,若是还采用原来的策略,先 P i c k Pick Pick最轻的塞进第一艘船然后再塞第二艘船感性理解上都不对。(话说最优装载问题是啥我都不知道,百度了一下才知道是价值全部为1的01背包
 直接举反例,两艘船 C 1 = C 2 = 4 C_1=C_2=4 C1=C2=4,四件物品重量 1 , 2 , 2 , 3 1,2,2,3 1,2,2,3,按照原来的策略则第一艘船塞进了 1 , 2 1,2 1,2,第二艘船塞进了 2 2 2。显然应该 1 , 3 1,3 1,3 2 , 2 2,2 2,2来分比较合理,有反例就不用证了

T4

神必的一批,看不太懂贪心,积化和到是网络流见过一次orz
洛谷P1249题解好吧,下面伪代码
f o r for for i = 1 i =1 i=1 t o to to n n n d o do do
   f o r for for j = n j =n j=n t o to to 1 1 1 d o do do
     i f if if d p [ j − i ] + l n ( i ) > d p [ j ] dp[j-i] +ln(i) > dp[j] dp[ji]+ln(i)>dp[j] t h e n then then
       d p [ j ] ← ( d p [ j − i ] + l n ( i ) ) dp[j] \leftarrow (dp[j-i]+ln(i)) dp[j](dp[ji]+ln(i))
       c h o o s e [ j ] ← ( j − i ) choose[j] \leftarrow (j-i) choose[j](ji)
     e n d i f endif endif
   e n d end end f o r for for
e n d end end f o r for for
a n s w e r ← 1 answer \leftarrow 1 answer1
p o s i t i o n ← c h o o s e [ n ] position \leftarrow choose[n] positionchoose[n]
w h i l e while while p o s i t i o n > 0 position > 0 position>0 d o do do
   a n s w e r ← a n s w e r ⋅ p o s i t i o n answer \leftarrow answer \cdot position answeranswerposition
   p o s i t i o n ← c h o o s e [ p o s i t i o n ] position \leftarrow choose[position] positionchoose[position]
e n d end end w h i l e while while

01背包时间复杂度 O ( n 2 ) O(n^2) O(n2)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值