——作者:Frosty_Jackal
期望 | 一测 | 差值 | |
A | 100 | 100 | 0 |
B | 0 | 0 | 0 |
C | 20 | 30 | +10 |
D | 0 | 0 | 0 |
E | 100 | 100 | 0 |
F | 100 | 100 | 0 |
G | 100 | 50 | -50 |
H | 100 | 90 | -10 |
总分 | 520 | 470 | -50 |
注意:
有些题对于部分人来说实在基础,故本题解只讲解本人不会的题或某些题本人并未拿到全分从而提醒读者注意的点。
对于B题(骨牌问题):
由于题目问的是方案总数,于是考虑 递推 或 动态规划!
由题,题目的长方形方格大小是2 x N的。则考虑每一个N由前几个N递推而来。
令DP【N】表示在2 x N 的方格中的方案总数,则:
【1】 对于N,dp【N】可以由dp【N-1】转移而来,即当第N列的骨牌竖向放置时,dp【N】+=dp【N-1】
【2】 对于N,dp【n】可以由dp【n-2】转移而来,即当N-1~N列均横向放置时成立,dp【N】+=dp【N-2】
综上,dp【N】=dp【N-1】+dp【N-2】!
对于C(大神排队):
(令i的影响力为w[i],承受力为v[i])
由于我们需要确定最合适的排队顺序从而得到最优的答案。
考虑贪心算法,假设我们队伍的前一部分已经是最优的顺序,我们现在需要思考的是如何确定紧挨着前半部分的i,j的顺序?
令有序序列所有人影响力之和为sum
- 若让i在j前,对于i号人,他承受的伤害为sum-v[i],j号人承受sum+w[i]-v[j]
- 若让j在i前,对于i号人,他承受的伤害为sum-v[i]+w[j],j号人承受sum-v[j]
所以当max(sum-v[i],sum+w[i]-v[j])比max(sum-v[i]+w[j],sum-v[j])小时,选择第[1]种排序方案,否则选择第[2]种排序方案;
由于影响力为非负数,故max(sum-v[i],sum+w[i]-v[j])为sum+w[i]-v[j],max(sum-v[i]+w[j],sum-v[j])为sum-v[i]+w[j]。故只需比较sum+w[i]-v[j] 与 sum-v[i]+w[j]
不等式两边同减去sum,移项,原不等式化为w[i]+v[i] ? w[j]+v[j]
故对于每个人,按w+v 排序即可。
最后枚举整个队伍,找到承受伤害的最大值,输出。
(看来我前两道题解写的太详细了,于是我决定下面的题目开启略写模式,点到为止)
D新约瑟夫游戏,考虑对于每个N,第一次游戏剩下的人的编号,即下一次游戏者的总数,
多算出几个N,会找到规律。由于每进行一次游戏N的大小就在不断缩小,就可以按规律找到不同N游戏时剩下人的编号。ans=n+剩余者。
G题注意统一并查集时,被连入的节点都要连接到并查集的最高祖先(统一)。
H 注意最初可能两人在同一点的情况。