Wizmann / ACM-ICPC

感觉自己做了假题。
http://wizmann.tk
Other
63 stars 29 forks source link

Leetcode Biweekly Contest 25 #33

Closed Wizmann closed 3 years ago

Wizmann commented 4 years ago

Contest

1431. Kids With the Greatest Number of Candies

日常水题,略

1432. Max Difference You Can Get From Changing an Integer

Rule可以这样规定。 取最小值的话,把第一个不是01的数位,替换成0或1(取决于是不是第一位)。 取最大值的话,把第一个不是9的数位,替换成9。

这题挺好的,corner case很多,但是每一个都是必须要考虑到的。

1433. Check If a String Can Break Another String

把两个字符串都排序,看是否有一个串在所有位置上都大于等于另一个串。

简单的贪心,证明就略吧。

1434. Number of Ways to Wear Different Hats to Each Other

DP好题。

DP的根本意义在于确定正确的归纳假设。但是一个正确的归纳假设有时候并不是最高效的那个。 本题最直接的DP思路是:DP[i][j],i代表第几个人,j代表现在已经用过了几个帽子(二进制压缩)。这样的问题在于j的取值空间太大了:C(40, 10) > 8 * 10^8。强行用C++搞也没准能过,但一定不是正解。

我们考虑把i和j换过来,即i代表第i个帽子,j代表戴这i个帽子一共有哪些人(已有的帽子可以不戴,使用二进制压缩)。这样i的空间是40(帽子种数),j的空间是2^10(最多10个人)。这样虽然非常反直觉,但是其效率可以大大的提升。

此题为我们提供了一个非常好的DP思路。(CF的DP专题刷起来,笑)

题目打分