我不想写作业orz![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/64a10a4ca7ce0c623568f65a874bc91a.png)
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={n−1个"0"(n−i)个"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[j−i]+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[j−i]+ln(i))
c
h
o
o
s
e
[
j
]
←
(
j
−
i
)
choose[j] \leftarrow (j-i)
choose[j]←(j−i)
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
answer←1
p
o
s
i
t
i
o
n
←
c
h
o
o
s
e
[
n
]
position \leftarrow choose[n]
position←choose[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
answer←answer⋅position
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]
position←choose[position]
e
n
d
end
end
w
h
i
l
e
while
while
01背包时间复杂度 O ( n 2 ) O(n^2) O(n2)