Leetcode 每日一题和每日一题的下一题刷题笔记 11/30

160 阅读37分钟

Leetcode 每日一题和每日一题的下一题刷题笔记 11/30

写在前面

这是我参与更文挑战的第11天,活动详情查看:更文挑战

快要毕业了,才发现自己被面试里的算法题吊起来锤。没办法只能以零基础的身份和同窗们共同加入了力扣刷题大军。我的同学们都非常厉害,他们平时只是谦虚,口头上说着自己不会,而我是真的不会。。。乘掘金鼓励新人每天写博客,我也凑个热闹,记录一下每天刷的前两道题,这两道题我精做。我打算每天刷五道题,其他的题目嘛,也只能强行背套路了,就不发在博客里了。

本人真的只是一个菜鸡,解题思路什么的就不要从我这里参考了,编码习惯也需要改进,各位如果想找刷题高手请教问题我觉得去找 宫水三叶的刷题日记 这位大佬比较好。我在把题目做出来之前尽量不去看题解,以免和大佬的内容撞车。

另外我也希望有得闲的大佬提供一些更高明的解题思路给我,欢迎讨论哈!

好了废话不多说开始第十一天的前两道题吧!

2021.6.11 每日一题

279. 完全平方数

这个题一看就知道是物品无限的背包问题。然后容量是当前的和 i,价值是最少需要的平方数个数 dp[i],这些平方数加起来就是当前的和 i。因为 i 是一个平方和,所以构成 i 的若干平方数开根号以后都没有 i 开根号之后大。这就定出来一个搜索范围,只要在 [0,i][0, \sqrt{\texttt{i}}] 里面挑选,平方之后加和就能找到一个凑出 i 的组合。假设现在选到了 j 这个数,那么之后就只需要去凑出 dp[i - j * j] 就可以。接下来就可以写状态转移方程了。

dp[i]=1+minj=1idp[ij2]\texttt{dp}[\texttt{i}] = 1 + \mathop{min}\limits_{\texttt{j} = 1}^{\lfloor \sqrt{\texttt{i}} \rfloor} \texttt{dp}[\texttt{i} - \texttt{j}^2]

class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n + 1);
        for (int i = 1; i <= n; i++) {
            int minn = INT_MAX;
            for (int j = 1; j * j <= i; j++) {
                minn = min(minn, dp[i - j * j]);
            }
            dp[i] = minn + 1;
        }
        return dp[n];
    }
};

image.png

其实这种求和的东西一般是有数学公式的,只要自己知道,数学公式永远比其他解题套路快。这块我看题解才知道有这么个定理叫四平方和定理

四平方和定理证明了任意一个正整数都可以被表示为至多四个正整数的平方和。这给出了本题的答案的上界。

同时四平方和定理包含了一个更强的结论:当且仅当 n4k×(8m+7)n \neq 4^k \times (8m + 7) 时,nn 可以被表示为至多三个正整数的平方和。因此,当 n=4k×(8m+7)n = 4^k \times (8m+7) 时,nn 只能被表示为四个正整数的平方和。此时我们可以直接返回 44

n4k×(8m+7)n \neq 4^k \times (8m+7) 时,我们需要判断到底多少个完全平方数能够表示 nn,我们知道答案只会是 1,2,31, 2, 3 中的一个:

答案为 11 时,则必有 nn 为完全平方数,这很好判断;

答案为 22 时,则有 n=a2+b2n=a^2+b^2,我们只需要枚举所有的 a(1an)a(1 \leq a \leq \sqrt{n}),判断 na2n - a^2 是否为完全平方数即可;

答案为 33 时,我们很难在一个优秀的时间复杂度内解决它,但我们只需要检查答案为 1122 的两种情况,即可利用排除法确定答案。

这是官方题解上的思路,这种思路一般拿来解算法题都是降维打击型的,代码逻辑会简单很多,前提是你清楚这能用公式来算,而且适用范围包括了题面给出的范围。

代码不贴了,我试一下这种解法的时间和空间排名。

image.png

降维打击恐怖如斯。

然后在评论区发现一个老哥的暴力解法,这个解法完全可以放到单片机上运行。

image.png

代码:


class Solution {
public:
    int numSquares(int n) {
        vector<int> dp={0,1,2,3,1,2,3,4,2,1,2,3,3,2,3,4,1,2,2,3,2,3,3,4,3,1,2,3,4,2,3,4,2,3,2,3,1,2,3,4,2,2,3,3,3,2,3,4,3,1,2,3,2,2,3,4,3,3,2,3,4,2,3,4,1,2,3,3,2,3,3,4,2,2,2,3,3,3,3,4,2,1,2,3,3,2,3,4,3,2,2,3,4,3,3,4,3,2,2,3,1,2,3,4,2,3,2,3,3,2,3,4,4,2,3,3,2,2,3,4,3,1,2,3,4,2,3,4,2,3,2,3,3,3,3,4,2,2,3,3,3,3,3,4,1,2,2,3,2,2,3,4,3,2,3,3,4,2,3,4,2,3,2,3,2,3,3,4,3,1,2,3,3,2,3,4,3,3,2,3,2,2,3,4,3,2,3,3,4,3,3,4,3,2,2,3,1,2,3,4,2,3,2,3,3,2,3,4,2,3,3,3,2,3,3,4,3,3,2,3,4,2,3,4,3,1,2,3,3,2,3,4,2,2,2,3,3,3,3,4,4,2,2,3,2,2,3,4,3,3,2,3,4,3,3,4,1,2,3,3,2,2,3,4,3,2,3,3,3,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,2,1,2,3,2,2,3,4,2,3,2,3,3,3,3,4,3,2,2,3,3,3,3,4,3,2,2,3,4,2,3,4,2,3,3,3,1,2,3,4,2,3,3,3,3,2,3,4,3,2,2,3,2,3,3,4,3,3,2,3,4,2,3,4,3,2,3,3,2,3,3,4,2,1,2,3,3,2,3,4,4,2,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,3,2,3,2,2,3,4,2,3,2,3,3,2,3,4,1,2,3,3,2,2,3,4,3,2,2,3,4,3,3,4,2,3,3,3,3,2,3,4,2,2,3,3,3,3,3,4,3,2,3,3,2,3,3,4,3,1,2,3,4,2,3,4,4,2,2,3,2,3,3,4,3,2,2,3,3,2,3,4,2,3,2,3,2,3,3,4,3,3,3,3,4,2,3,4,3,2,2,3,1,2,3,4,2,3,2,3,3,2,3,4,4,3,3,3,2,3,3,4,3,2,3,3,4,2,3,4,2,3,2,3,3,3,3,4,2,2,2,3,3,3,3,4,3,1,2,3,3,2,3,4,3,3,2,3,4,2,3,4,2,2,3,3,2,2,3,4,3,3,2,3,3,2,3,4,3,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,1,2,2,3,2,3,3,4,2,2,2,3,3,3,3,4,2,2,3,3,2,3,3,4,3,2,3,3,4,2,3,4,3,3,2,3,2,2,3,4,3,2,3,3,3,3,3,4,4,1,2,3,2,2,3,4,3,3,2,3,4,2,3,4,2,2,3,3,3,3,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,2,3,4,3,3,2,3,4,3,3,4,3,2,2,3,1,2,3,4,2,3,3,3,3,2,3,4,3,2,3,3,2,3,3,4,3,2,2,3,4,2,3,4,3,3,2,3,3,2,3,4,2,3,3,3,3,3,3,4,2,3,2,3,2,2,3,4,3,1,2,3,4,2,3,4,3,3,2,3,2,3,3,4,3,2,2,3,3,3,3,4,4,3,2,3,3,2,3,4,3,2,3,3,4,2,3,4,3,2,3,3,2,2,3,4,2,3,2,3,3,3,3,4,1,2,3,3,2,3,3,4,3,2,2,3,4,2,3,4,2,2,2,3,3,3,3,4,2,2,2,3,3,3,3,4,3,3,2,3,2,2,3,4,3,3,3,3,4,2,3,4,2,2,3,3,3,3,3,4,3,1,2,3,3,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,2,2,3,3,3,3,4,2,2,3,3,3,2,3,4,4,2,2,3,2,3,3,4,3,3,2,3,4,3,3,4,3,3,2,3,1,2,3,4,2,2,3,3,3,2,3,4,3,3,2,3,2,3,3,4,3,3,2,3,4,2,3,4,2,2,3,3,2,3,3,4,2,2,3,3,3,2,3,4,3,3,3,3,3,2,3,4,3,2,2,3,4,3,3,4,4,1,2,3,2,2,3,4,2,3,2,3,3,3,3,4,2,2,3,3,2,2,3,4,3,2,2,3,4,3,3,4,3,3,3,3,3,2,3,4,2,3,3,3,3,3,3,4,4,2,2,3,3,2,3,4,3,2,2,3,4,2,3,4,1,2,3,3,2,3,3,4,3,2,3,3,3,2,3,4,2,3,2,3,2,3,3,4,3,2,3,3,4,2,3,4,3,3,2,3,2,2,3,4,3,3,2,3,3,2,3,4,3,2,3,3,2,3,3,4,3,3,2,3,4,3,3,4,2,1,2,3,3,2,3,4,2,2,2,3,3,3,3,4,3,2,3,3,2,2,3,4,3,3,2,3,4,2,3,4,3,3,3,3,2,2,3,4,3,2,2,3,3,3,3,4,4,3,2,3,3,3,3,4,3,2,3,3,4,3,3,4,2,2,2,3,1,2,3,4,2,3,3,3,3,2,3,4,2,3,2,3,2,3,3,4,3,3,3,3,4,2,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,3,2,2,3,3,2,3,4,3,3,2,3,4,2,3,4,3,2,3,3,2,3,3,4,2,1,2,3,3,2,3,4,3,2,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,3,3,4,2,3,2,3,3,2,3,4,4,3,3,3,2,3,3,4,3,3,2,3,4,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,3,3,3,4,1,2,3,3,2,2,3,4,3,2,2,3,4,3,3,4,2,2,2,3,3,3,3,4,3,2,2,3,3,2,3,4,3,3,3,3,2,3,3,4,3,3,3,3,4,2,3,4,3,2,2,3,2,3,3,4,2,3,2,3,3,3,3,4,2,2,3,3,3,3,3,4,3,1,2,3,4,2,3,4,3,2,2,3,3,2,3,4,2,2,3,3,3,3,3,4,4,3,2,3,2,3,3,4,3,3,2,3,4,2,3,4,3,2,3,3,2,2,3,4,3,2,2,3,3,2,3,4,2,3,3,3,3,2,3,4,3,2,3,3,4,3,3,4,2,3,3,3,1,2,3,4,2,3,2,3,3,2,3,4,3,3,2,3,2,3,3,4,3,2,2,3,4,2,3,4,4,3,3,3,2,3,3,4,2,2,3,3,3,3,3,4,3,2,2,3,2,2,3,4,3,3,3,3,4,3,3,4,3,3,3,3,2,3,3,4,3,2,2,3,3,2,3,4,4,1,2,3,3,2,3,4,3,3,2,3,4,3,3,4,3,2,2,3,3,3,3,4,2,3,2,3,3,2,3,4,2,2,3,3,2,2,3,4,3,3,3,3,4,2,3,4,2,3,2,3,3,2,3,4,2,3,3,3,3,3,3,4,3,2,2,3,2,3,3,4,3,3,2,3,4,2,3,4,1,2,2,3,2,3,3,4,3,2,3,3,3,2,3,4,2,3,2,3,2,2,3,4,3,2,3,3,4,2,3,4,3,3,3,3,2,2,3,4,2,3,2,3,3,3,3,4,4,2,3,3,3,3,3,4,3,2,2,3,4,3,3,4,2,2,2,3,3,2,3,4,3,3,3,3,3,3,3,4,3,1,2,3,2,2,3,4,3,3,2,3,4,2,3,4,2,2,3,3,2,3,3,4,3,3,2,3,3,2,3,4,3,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,3,2,3,2,2,3,4,3,2,3,3,3,2,3,4,2,2,2,3,3,3,3,4,3,2,2,3,4,3,3,4,3,3,2,3,1,2,3,4,2,2,3,3,3,2,3,4,4,2,3,3,2,2,3,4,3,3,3,3,4,2,3,4,4,3,3,3,2,3,3,4,2,2,2,3,3,2,3,4,2,3,2,3,3,2,3,4,3,3,2,3,4,3,3,4,3,2,3,3,2,3,3,4,2,3,3,3,3,3,3,4,3,3,3,3,2,2,3,4,3,1,2,3,4,2,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,2,2,2,3,3,2,3,4,3,3,2,3,4,2,3,4,3,2,3,3,3,3,3,4,3,3,2,3,3,2,3,4,4,3,2,3,2,3,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,3,3,4,2,3,2,3,3,2,3,4,1,2,3,3,2,3,3,4,3,2,3,3,4,2,3,4,2,3,2,3,3,3,3,4,2,2,2,3,3,3,3,4,3,3,2,3,2,2,3,4,3,3,3,3,4,3,3,4,4,2,3,3,3,2,3,4,3,2,2,3,3,2,3,4,2,3,3,3,3,2,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,3,3,4,3,1,2,3,3,2,3,4,4,3,2,3,2,3,3,4,3,2,2,3,4,2,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,2,3,4,3,3,2,3,3,2,3,4,3,3,2,3,4,3,3,4,2,2,3,3,2,3,3,4,2,2,3,3,3,3,3,4,3,2,2,3,3,3,3,4,3,2,2,3,4,3,3,4,3,2,3,3,1,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,2,3,3,4,3,2,2,3,4,2,3,4,3,3,2,3,3,3,3,4,2,2,3,3,3,3,3,4,4,2,3,3,2,2,3,4,3,2,3,3,4,2,3,4,2,3,2,3,2,3,3,4,3,3,2,3,3,3,3,4,2,3,2,3,2,2,3,4,3,3,3,3,4,2,3,4,3,1,2,3,3,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,2,3,3,4,3,3,2,3,4,2,3,4,3,3,3,3,3,2,3,4,2,2,2,3,3,3,3,4,3,2,2,3,2,3,3,4,3,3,3,3,4,2,3,4,3,2,3,3,2,3,3,4,3,2,3,3,3,2,3,4,4,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,1,2,2,3,2,2,3,4,2,2,2,3,3,3,3,4,2,3,3,3,3,3,3,4,3,2,2,3,4,2,3,4,2,3,3,3,2,2,3,4,2,3,3,3,3,2,3,4,3,2,3,3,3,2,3,4,3,3,2,3,4,3,3,4,2,3,3,3,2,3,3,4,3,2,2,3,3,2,3,4,2,2,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,1,2,3,2,2,3,4,3,3,2,3,3,3,3,4,4,2,3,3,2,2,3,4,3,2,2,3,4,3,3,4,3,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,2,3,2,3,2,3,3,4,3,3,2,3,4,3,3,4,3,2,2,3,2,3,3,4,3,2,2,3,3,2,3,4,3,3,2,3,3,3,3,4,3,3,3,3,4,2,3,4,4,3,2,3,1,2,3,4,2,3,3,3,3,2,3,4,2,3,3,3,2,3,3,4,3,2,2,3,4,2,3,4,3,2,3,3,3,2,3,4,2,3,3,3,3,3,3,4,4,2,3,3,2,2,3,4,3,3,2,3,4,2,3,4,2,2,3,3,2,3,3,4,3,3,2,3,3,3,3,4,3,3,2,3,3,2,3,4,3,3,3,3,4,3,3,4,2,2,2,3,3,2,3,4,2,1,2,3,3,2,3,4,3,2,2,3,2,3,3,4,3,2,3,3,4,2,3,4,2,3,2,3,2,3,3,4,3,2,3,3,3,2,3,4,3,3,2,3,2,2,3,4,3,3,2,3,4,3,3,4,3,2,3,3,3,3,3,4,2,2,3,3,3,2,3,4,4,3,3,3,3,2,3,4,3,3,2,3,4,3,3,4,3,2,2,3,2,2,3,4,2,3,3,3,3,2,3,4,1,2,3,3,2,3,3,4,3,2,3,3,4,3,3,4,2,3,2,3,3,2,3,4,3,2,3,3,3,3,3,4,3,3,2,3,2,2,3,4,3,2,2,3,4,2,3,4,3,2,2,3,2,3,3,4,3,3,2,3,3,3,3,4,2,3,2,3,3,3,3,4,3,2,3,3,4,3,3,4,3,2,3,3,2,2,3,4,2,3,3,3,3,2,3,4,4,2,3,3,2,3,3,4,3,1,2,3,4,2,3,4,3,2,2,3,3,3,3,4,2,2,2,3,3,3,3,4,3,2,2,3,2,2,3,4,3,3,2,3,4,2,3,4,2,3,3,3,3,2,3,4,3,2,2,3,3,2,3,4,3,3,2,3,3,3,3,4,3,2,3,3,4,3,3,4,2,3,3,3,3,2,3,4,2,3,2,3,3,3,3,4,2,2,3,3,2,3,3,4,3,3,2,3,4,2,3,4,3,3,3,3,1,2,3,4,2,3,3,3,3,2,3,4,4,2,2,3,2,3,3,4,3,3,2,3,4,2,3,4,3,3,3,3,3,3,3,4,2,2,3,3,3,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,3,3,4,2,3,2,3,3,2,3,4,3,2,3,3,3,2,3,4,3,2,3,3,4,2,3,4,4,3,3,3,3,3,3,4,2,3,3,3,3,3,3,4,3,1,2,3,2,2,3,4,3,2,2,3,4,2,3,4,3,2,2,3,2,3,3,4,3,2,2,3,3,3,3,4,4,3,3,3,2,2,3,4,3,2,3,3,4,3,3,4,3,3,2,3,2,2,3,4,3,3,3,3,3,2,3,4,2,2,3,3,2,3,3,4,3,3,2,3,4,3,3,4,2,3,2,3,3,2,3,4,2,3,2,3,3,3,3,4,3,2,3,3,3,2,3,4,3,3,2,3,4,2,3,4,1,2,3,3,2,2,3,4,3,2,2,3,3,3,3,4,2,3,3,3,3,3,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,3,3,4,2,2,3,3,3,2,3,4,4,2,3,3,2,3,3,4,3,3,2,3,4,3,3,4,2,3,2,3,2,2,3,4,2,2,3,3,3,3,3,4,3,2,2,3,3,2,3,4,3,3,2,3,4,2,3,4,2,2,3,3,2,3,3,4,2,3,2,3,3,3,3,4,3,1,2,3,3,2,3,4,3,2,2,3,4,3,3,4,3,2,3,3,3,3,3,4,2,3,2,3,3,2,3,4,2,2,3,3,2,2,3,4,3,3,3,3,4,2,3,4,3,3,2,3,3,2,3,4,3,2,3,3,3,3,3,4,4,2,2,3,2,3,3,4,3,2,3,3,4,3,3,4,2,2,2,3,2,3,3,4,3,3,2,3,3,2,3,4,3,3,3,3,3,2,3,4,3,3,3,3,4,2,3,4,3,2,2,3,1,2,3,4,2,3,2,3,3,2,3,4,3,3,3,3,2,3,3,4,3,2,2,3,4,2,3,4,2,2,2,3,3,3,3,4,2,3,3,3,3,3,3,4,3,3,3,3,2,2,3,4,3,3,2,3,4,3,3,4,3,2,3,3,2,3,3,4,3,2,2,3,3,3,3,4,4,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,2,3,3,2,2,3,4,2,3,2,3,3,2,3,4,3,3,2,3,3,3,3,4,3,1,2,3,4,2,3,4,2,3,2,3,2,3,3,4,3,2,3,3,3,2,3,4,3,2,2,3,2,2,3,4,3,3,3,3,4,2,3,4,4,3,3,3,2,3,3,4,2,2,2,3,3,2,3,4,2,3,2,3,3,2,3,4,3,2,2,3,4,3,3,4,3,3,2,3,3,2,3,4,2,3,2,3,3,3,3,4,4,3,3,3,3,2,3,4,3,2,2,3,4,2,3,4,3,3,3,3,3,2,3,4,2,2,3,3,3,3,3,4,1,2,2,3,2,3,3,4,3,2,2,3,4,2,3,4,2,2,3,3,2,3,3,4,3,2,2,3,3,3,3,4,3,3,3,3,2,2,3,4,3,3,3,3,4,2,3,4,3,2,2,3,3,2,3,4,2,3,3,3,3,3,3,4,2,2,3,3,3,3,3,4,3,2,3,3,4,2,3,4,3,2,3,3,3,3,3,4,2,3,2,3,3,3,3,4,4,2,2,3,2,2,3,4,3,3,2,3,4,2,3,4,2,3,3,3,2,3,3,4,3,1,2,3,3,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,2,3,2,3,2,3,3,4,3,3,2,3,3,2,3,4,3,2,3,3,2,3,3,4,3,2,2,3,4,3,3,4,3,3,2,3,3,3,3,4,3,2,3,3,3,2,3,4,3,2,3,3,2,2,3,4,3,3,2,3,4,2,3,4,3,2,3,3,2,3,3,4,2,3,3,3,3,2,3,4,4,2,2,3,3,3,3,4,3,2,3,3,4,3,3,4,4,3,2,3,1,2,3,4,2,3,3,3,3,2,3,4,2,3,3,3,2,3,3,4,3,2,2,3,4,2,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,3,2,2,3,3,2,3,4,3,2,2,3,4,3,3,4,2,3,3,3,2,3,3,4,3,3,3,3,3,2,3,4,2,3,2,3,2,2,3,4,3,2,3,3,4,3,3,4,3,3,3,3,2,3,3,4,2,3,2,3,3,3,3,4,4,3,3,3,3,3,3,4,3,2,3,3,4,2,3,4,3,1,2,3,3,2,3,4,3,2,2,3,3,3,3,4,3,2,2,3,2,2,3,4,3,3,2,3,4,3,3,4,2,2,3,3,3,2,3,4,3,3,2,3,3,2,3,4,3,3,2,3,3,2,3,4,3,3,3,3,4,3,3,4,4,2,2,3,2,3,3,4,2,2,3,3,3,2,3,4,3,2,2,3,2,3,3,4,3,2,2,3,4,3,3,4,3,3,3,3,2,2,3,4,2,2,3,3,3,3,3,4,4,3,2,3,2,3,3,4,3,3,2,3,4,2,3,4,1,2,3,3,2,3,3,4,3,2,2,3,3,3,3,4,2,2,2,3,3,3,3,4,3,2,2,3,4,3,3,4,3,2,3,3,2,2,3,4,3,3,2,3,3,2,3,4,3,2,3,3,2,2,3,4,3,2,3,3,4,2,3,4,2,3,2,3,3,2,3,4,2,3,3,3,3,3,3,4,2,2,2,3,3,2,3,4,3,3,3,3,4,3,3,4,3,3,2,3,2,3,3,4,3,2,3,3,3,2,3,4,4,3,2,3,2,3,3,4,3,2,3,3,4,3,3,4,3,1,2,3,3,2,3,4,2,3,2,3,3,3,3,4,2,2,3,3,2,3,3,4,3,3,2,3,4,2,3,4,3,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,3,2,2,3,2,3,3,4,3,3,2,3,4,2,3,4,3,2,3,3,2,2,3,4,3,2,3,3,3,3,3,4,2,3,2,3,3,3,3,4,3,3,3,3,4,3,3,4,3,2,2,3,3,2,3,4,2,2,2,3,3,3,3,4,4,2,2,3,3,3,3,4,3,3,2,3,4,2,3,4,2,3,3,3,1,2,3,4,2,2,3,3,3,2,3,4,3,2,3,3,2,2,3,4,3,3,3,3,4,2,3,4,2,2,3,3,2,3,3,4,2,3,2,3,3,2,3,4,3,3,3,3,3,2,3,4,3,2,2,3,4,3,3,4,3,3,2,3,2,2,3,4,3,3,2,3,3,3,3,4,2,3,3,3,2,2,3,4,3,2,2,3,4,3,3,4,3,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,4,3,3,3,2,2,3,4,3,3,2,3,4,2,3,4,3,2,3,3,3,3,3,4,3,1,2,3,3,2,3,4,2,3,2,3,2,3,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,2,3,4,2,3,3,3,3,2,3,4,3,3,3,3,3,3,3,4,3,2,2,3,4,3,3,4,4,2,2,3,3,2,3,4,2,2,3,3,3,3,3,4,3,2,2,3,3,3,3,4,3,3,2,3,4,2,3,4,3,3,3,3,2,2,3,4,3,3,2,3,3,2,3,4,4,3,2,3,3,2,3,4,3,3,3,3,4,3,3,4,2,3,2,3,2,3,3,4,2,3,2,3,3,2,3,4,1,2,2,3,2,3,3,4,3,2,3,3,4,2,3,4,2,3,3,3,3,2,3,4,3,2,3,3,3,3,3,4,3,2,2,3,2,3,3,4,3,3,2,3,4,3,3,4,2,2,3,3,3,3,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,2,3,4,3,3,2,3,4,3,3,4,3,2,2,3,3,2,3,4,3,3,2,3,3,2,3,4,4,2,3,3,2,3,3,4,3,2,3,3,4,2,3,4,2,3,3,3,3,3,3,4,2,2,3,3,3,3,3,4,3,2,2,3,2,3,3,4,3,1,2,3,4,2,3,4,2,3,2,3,2,3,3,4,3,2,2,3,3,3,3,4,3,3,2,3,3,2,3,4,3,2,3,3,4,2,3,4,3,2,2,3,2,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,2,3,3,4,3,2,3,3,4,3,3,4,3,3,2,3,3,3,3,4,2,3,2,3,3,3,3,4,4,2,2,3,2,3,3,4,3,3,3,3,4,2,3,4,3,3,3,3,2,2,3,4,3,3,2,3,3,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,2,3,3,3,1,2,3,4,2,2,3,3,3,2,3,4,3,2,3,3,2,3,3,4,3,3,3,3,4,2,3,4,3,3,2,3,2,2,3,4,2,2,3,3,3,2,3,4,3,3,2,3,2,2,3,4,3,3,2,3,4,2,3,4,3,2,3,3,2,3,3,4,3,2,3,3,3,2,3,4,4,3,3,3,3,2,3,4,3,2,2,3,4,3,3,4,3,2,3,3,2,3,3,4,2,3,2,3,3,3,3,4,2,2,3,3,3,2,3,4,3,2,2,3,4,2,3,4,2,3,3,3,3,3,3,4,2,3,3,3,3,3,3,4,3,1,2,3,2,2,3,4,3,3,2,3,4,3,3,4,4,2,2,3,3,3,3,4,3,2,2,3,3,2,3,4,2,3,3,3,3,2,3,4,3,2,3,3,4,2,3,4,3,3,2,3,3,3,3,4,2,3,2,3,3,2,3,4,4,2,3,3,2,3,3,4,3,2,2,3,4,3,3,4,2,2,2,3,3,2,3,4,2,3,3,3,3,3,3,4,3,3,3,3,2,2,3,4,3,3,3,3,4,3,3,4,3,2,3,3,2,3,3,4,3,2,2,3,3,2,3,4,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,4,1,2,2,3,2,2,3,4,3,2,2,3,3,2,3,4,2,3,2,3,2,3,3,4,3,2,2,3,4,2,3,4,3,3,2,3,2,3,3,4,2,3,3,3,3,3,3,4,4,2,2,3,3,2,3,4,3,3,2,3,4,2,3,4,2,2,3,3,2,3,3,4,2,3,3,3,3,2,3,4,3,2,2,3,3,3,3,4,3,2,2,3,4,3,3,4,3,2,3,3,2,3,3,4,2,3,2,3,3,3,3,4,3,2,3,3,2,3,3,4,3,2,3,3,4,2,3,4,3,3,2,3,3,2,3,4,3,2,3,3,3,3,3,4,2,1,2,3,3,2,3,4,3,2,2,3,4,2,3,4,3,2,3,3,3,3,3,4,3,2,2,3,3,3,3,4,4,3,3,3,2,2,3,4,3,3,3,3,4,3,3,4,3,3,2,3,2,2,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,3,3,2,3,4,3,3,4,2,2,2,3,3,2,3,4,2,2,3,3,3,3,3,4,3,3,2,3,3,2,3,4,3,3,3,3,4,2,3,4,2,2,3,3,2,2,3,4,3,2,2,3,3,3,3,4,3,3,2,3,3,3,3,4,3,2,3,3,4,3,3,4,3,2,3,3,1,2,3,4,2,3,2,3,3,2,3,4,4,3,2,3,2,3,3,4,3,3,2,3,4,2,3,4,3,3,2,3,2,3,3,4,2,2,3,3,3,2,3,4,3,2,3,3,2,2,3,4,3,3,3,3,4,3,3,4,2,2,3,3,2,3,3,4,3,2,3,3,3,3,3,4,3,2,2,3,3,2,3,4,3,3,3,3,4,3,3,4,4,2,2,3,3,2,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,3,3,2,3,4,2,3,4,3,3,2,3,3,3,3,4,2,3,3,3,3,3,3,4,4,2,2,3,2,3,3,4,3,1,2,3,4,2,3,4,3,3,2,3,2,3,3,4,3,2,3,3,3,2,3,4,2,3,2,3,2,2,3,4,3,2,3,3,4,2,3,4,3,3,2,3,2,2,3,4,2,3,2,3,3,3,3,4,3,3,3,3,2,3,3,4,3,2,2,3,4,2,3,4,2,3,3,3,3,2,3,4,3,3,2,3,3,3,3,4,3,2,2,3,2,2,3,4,3,3,2,3,4,2,3,4,3,2,3,3,2,2,3,4,3,2,3,3,3,2,3,4,4,3,2,3,3,2,3,4,3,3,3,3,4,3,3,4,2,3,3,3,3,2,3,4,3,2,2,3,3,3,3,4,1,2,3,3,2,3,3,4,3,2,3,3,4,3,3,4,2,3,2,3,3,3,3,4,2,2,3,3,3,3,3,4,3,2,3,3,2,2,3,4,3,3,2,3,4,2,3,4,3,2,3,3,3,3,3,4,2,3,2,3,3,2,3,4,2,3,3,3,3,3,3,4,3,2,2,3,4,3,3,4,3,2,2,3,2,2,3,4,2,3,3,3,3,2,3,4,4,3,3,3,2,2,3,4,3,2,2,3,4,3,3,4,4,3,3,3,3,3,3,4,3,2,3,3,3,3,3,4,2,2,2,3,3,3,3,4,3,2,2,3,4,2,3,4,2,3,3,3,2,3,3,4,3,1,2,3,3,2,3,4,3,3,2,3,3,2,3,4,3,2,3,3,4,2,3,4,3,2,2,3,2,3,3,4,2,3,3,3,3,2,3,4,2,3,3,3,2,3,3,4,3,3,2,3,4,2,3,4,3,3,2,3,3,2,3,4,3,2,2,3,3,3,3,4,4,2,2,3,3,2,3,4,3,3,2,3,4,3,3,4,3,3,3,3,3,3,3,4,3,2,3,3,3,2,3,4,2,3,3,3,3,2,3,4,3,3,3,3,4,3,3,4,3,3,2,3,2,2,3,4,2,2,2,3,3,3,3,4,3,2,2,3,2,3,3,4,3,2,2,3,4,3,3,4,4,3,2,3,1,2,3,4,2,2,3,3,3,2,3,4,3,3,2,3,2,2,3,4,3,3,3,3,4,2,3,4,3,2,3,3,3,3,3,4,2,2,2,3,3,2,3,4,4,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,2,3,3,2,3,3,4,2,3,2,3,3,3,3,4,3,2,3,3,3,2,3,4,3,3,2,3,4,2,3,4,2,3,2,3,3,3,3,4,2,2,3,3,3,3,3,4,3,3,3,3,2,2,3,4,3,2,3,3,4,2,3,4,2,3,3,3,2,3,3,4,3,2,2,3,3,2,3,4,2,3,3,3,2,2,3,4,3,3,3,3,4,3,3,4,3,1,2,3,3,2,3,4,3,3,2,3,3,2,3,4,4,2,3,3,2,3,3,4,3,3,2,3,4,2,3,4,2,2,2,3,3,2,3,4,2,3,2,3,3,3,3,4,3,3,2,3,2,3,3,4,3,3,3,3,4,2,3,4,2,2,3,3,3,2,3,4,3,3,3,3,3,2,3,4,3,3,2,3,3,3,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,2,3,4,2,3,3,3,3,3,3,4,2,2,2,3,3,3,3,4,3,2,2,3,4,3,3,4,3,3,2,3,3,2,3,4,2,3,3,3,3,2,3,4,4,2,3,3,2,2,3,4,3,3,3,3,4,2,3,4,1,2,3,3,2,3,3,4,2,2,2,3,3,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,3,2,3,2,2,3,4,3,3,2,3,3,2,3,4,3,2,3,3,2,3,3,4,3,3,2,3,4,3,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,2,2,3,3,2,2,3,4,3,3,3,3,4,3,3,4,3,2,2,3,2,3,3,4,3,2,2,3,3,3,3,4,4,3,2,3,2,3,3,4,3,2,3,3,4,2,3,4,3,2,2,3,3,3,3,4,3,3,3,3,3,3,3,4,2,3,3,3,2,3,3,4,3,2,2,3,4,3,3,4,2,1,2,3,3,2,3,4,2,2,2,3,3,3,3,4,3,2,3,3,3,2,3,4,3,3,2,3,4,3,3,4,4,3,3,3,2,2,3,4,3,3,2,3,3,2,3,4,3,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,3,3,4,2,3,3,3,3,2,3,4,4,2,2,3,3,3,3,4,3,2,3,3,4,2,3,4,2,3,2,3,2,2,3,4,2,3,3,3,3,3,3,4,3,2,3,3,2,3,3,4,3,3,2,3,4,3,3,4,3,2,3,3,3,3,3,4,3,2,2,3,3,2,3,4,3,2,3,3,3,2,3,4,3,2,2,3,4,3,3,4,3,3,2,3,1,2,3,4,2,3,2,3,3,2,3,4,2,2,3,3,2,3,3,4,3,3,2,3,4,2,3,4,3,3,3,3,3,2,3,4,2,2,3,3,3,3,3,4,4,3,2,3,2,2,3,4,3,3,2,3,4,2,3,4,2,3,2,3,2,3,3,4,3,2,3,3,3,3,3,4,2,3,3,3,3,2,3,4,3,3,3,3,4,2,3,4,3,2,3,3,3,3,3,4,2,3,2,3,3,2,3,4,3,2,3,3,2,3,3,4,3,2,3,3,4,2,3,4,3,2,2,3,3,3,3,4,2,2,3,3,3,3,3,4,3,2,2,3,2,2,3,4,3,3,3,3,4,2,3,4,3,3,3,3,2,2,3,4,3,1,2,3,3,2,3,4,4,3,2,3,3,3,3,4,3,2,3,3,4,3,3,4,3,3,2,3,3,2,3,4,2,2,2,3,3,2,3,4,2,2,3,3,2,3,3,4,3,3,2,3,4,3,3,4,3,3,3,3,2,2,3,4,3,2,3,3,3,2,3,4,3,2,2,3,2,3,3,4,3,3,2,3,4,3,3,4,2,2,3,3,2,3,3,4,2,3,3,3,3,2,3,4,3,3,2,3,3,2,3,4,3,2,2,3,4,3,3,4,3,3,2,3,2,2,3,4,2,3,2,3,3,3,3,4,4,2,3,3,3,3,3,4,3,2,2,3,4,3,3,4,3,3,3,3,3,2,3,4,2,3,3,3,3,3,3,4,1,2,2,3,2,3,3,4,3,2,2,3,4,2,3,4,2,3,3,3,2,3,3,4,3,2,2,3,3,2,3,4,3,3,2,3,2,2,3,4,3,3,3,3,4,3,3,4,4,2,3,3,2,2,3,4,3,3,2,3,3,3,3,4,2,2,3,3,2,3,3,4,3,2,3,3,4,3,3,4,3,2,3,3,3,2,3,4,3,2,2,3,3,3,3,4,4,3,2,3,2,2,3,4,3,3,2,3,4,2,3,4,4,3,3,3,3,2,3,4,3,2,2,3,3,3,3,4,2,3,2,3,3,3,3,4,3,2,3,3,4,3,3,4,2,3,2,3,2,3,3,4,2,2,3,3,3,2,3,4,3,3,2,3,2,3,3,4,3,1,2,3,4,2,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,3,3,2,3,2,2,3,4,3,3,3,3,4,2,3,4,3,2,3,3,3,3,3,4,2,3,2,3,3,3,3,4,4,2,3,3,3,3,3,4,3,2,2,3,4,3,3,4,3,2,2,3,2,2,3,4,3,3,2,3,3,2,3,4,2,3,3,3,3,3,3,4,3,2,3,3,4,2,3,4,2,3,2,3,3,2,3,4,3,3,3,3,3,3,3,4,3,2,2,3,3,2,3,4,3,3,2,3,4,3,3,4,3,2,2,3,3,3,3,4,3,2,3,3,3,2,3,4,2,3,3,3,2,2,3,4,3,3,3,3,4,2,3,4,3,2,2,3,1,2,3,4,2,3,2,3,3,2,3,4,4,3,3,3,2,3,3,4,3,2,2,3,4,2,3,4,2,3,3,3,3,3,3,4,2,2,3,3,3,3,3,4,3,3,2,3,2,2,3,4,3,3,2,3,4,2,3,4,2,2,3,3,2,2,3,4,3,2,2,3,3,3,3,4,3,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,2,2,3,3,2,3,3,4,2,2,3,3,3,2,3,4,3,3,3,3,2,3,3,4,3,3,2,3,4,2,3,4,3,3,2,3,3,3,3,4,2,2,3,3,3,3,3,4,4,2,2,3,2,2,3,4,3,3,3,3,4,2,3,4,3,3,3,3,2,3,3,4,3,2,3,3,3,2,3,4,3,1,2,3,3,2,3,4,3,2,2,3,4,3,3,4,3,2,2,3,3,2,3,4,2,3,2,3,3,3,3,4,3,3,3,3,2,2,3,4,3,3,2,3,4,3,3,4,4,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,2,2,3,3,3,3,3,4,3,3,2,3,4,3,3,4,3,2,2,3,2,3,3,4,3,3,3,3,3,3,3,4,4,3,2,3,3,2,3,4,3,2,3,3,4,2,3,4,3,2,3,3,2,2,3,4,2,3,2,3,3,2,3,4,2,3,3,3,3,3,3,4,3,3,2,3,4,2,3,4,2,2,3,3,3,2,3,4,2,3,3,3,3,3,3,4,3,3,2,3,2,3,3,4,3,3,2,3,4,2,3,4,1,2,3,3,2,3,3,4,3,2,2,3,3,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,4,3,3,4,3,3,2,3,2,3,3,4,3,2,2,3,3,2,3,4,4,2,2,3,2,3,3,4,3,2,3,3,4,3,3,4,2,3,3,3,3,2,3,4,2,2,3,3,3,3,3,4,3,2,3,3,3,2,3,4,3,3,2,3,4,2,3,4,2,2,3,3,2,3,3,4,2,3,2,3,3,2,3,4,3,2,2,3,3,3,3,4,3,2,3,3,4,3,3,4,3,2,3,3,3,2,3,4,2,3,3,3,3,3,3,4,2,3,3,3,2,2,3,4,3,2,3,3,4,2,3,4,3,3,3,3,3,3,3,4,3,2,3,3,3,3,3,4,4,1,2,3,3,2,3,4,3,2,2,3,4,2,3,4,4,2,2,3,2,3,3,4,3,3,2,3,3,2,3,4,3,3,2,3,2,2,3,4,3,3,3,3,4,3,3,4,3,2,2,3,2,3,3,4,2,3,2,3,3,3,3,4,3,2,3,3,2,3,3,4,3,2,3,3,4,3,3,4,2,3,2,3,3,2,3,4,3,2,2,3,3,3,3,4,3,2,3,3,2,2,3,4,3,3,2,3,4,3,3,4,3,2,3,3,2,3,3,4,3,3,2,3,3,2,3,4,4,3,3,3,3,2,3,4,3,3,3,3,4,3,3,4,3,2,2,3,2,2,3,4,2,3,3,3,3,2,3,4,2,2,2,3,3,3,3,4,3,2,2,3,4,2,3,4,3,3,2,3,1,2,3,4,2,2,3,3,3,2,3,4,3,3,2,3,2,2,3,4,3,3,3,3,4,2,3,4,4,3,3,3,3,3,3,4,2,3,2,3,3,3,3,4,2,2,2,3,3,2,3,4,3,3,3,3,4,3,3,4,3,2,3,3,2,3,3,4,2,3,3,3,3,3,3,4,4,2,3,3,2,2,3,4,3,2,2,3,4,3,3,4,2,3,2,3,3,3,3,4,2,3,3,3,3,3,3,4,3,2,2,3,2,3,3,4,3,3,3,3,4,2,3,4,2,3,2,3,2,3,3,4,3,2,3,3,3,2,3,4,3,3,2,3,2,2,3,4,3,2,3,3,4,3,3,4,3,3,2,3,3,3,3,4,2,3,2,3,3,2,3,4,3,2,3,3,2,3,3,4,3,1,2,3,4,2,3,4,3,3,2,3,3,2,3,4,2,2,2,3,3,3,3,4,4,3,2,3,3,3,3,4,3,3,2,3,4,2,3,4,2,2,3,3,2,2,3,4,3,2,2,3,3,2,3,4,2,3,3,3,3,3,3,4,3,2,3,3,4,3,3,4,2,2,2,3,2,2,3,4,3,2,2,3,3,3,3,4,3,2,3,3,3,3,3,4,3,2,3,3,4,2,3,4,3,3,3,3,2,2,3,4,2,3,3,3,3,3,3,4,3,3,2,3,3,2,3,4,3,3,2,3,4,3,3,4,3,3,3,3,2,3,3,4,2,2,3,3,3,2,3,4,4,2,2,3,3,3,3,4,3,3,3,3,4,3,3,4,3,3,2,3,2,3,3,4,3,3,2,3,3,2,3,4,1,2,3,3,2,2,3,4,3,2,3,3,4,2,3,4,2,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,3,2,3,3,2,2,3,4,3,3,2,3,4,3,3,4,3,2,3,3,2,3,3,4,3,2,2,3,3,3,3,4,2,3,2,3,3,3,3,4,3,2,3,3,4,2,3,4,3,2,2,3,2,3,3,4,2,3,3,3,3,3,3,4,4,3,3,3,2,3,3,4,3,3,2,3,4,2,3,4,3,2,2,3,3,2,3,4,2,2,2,3,3,3,3,4,3,2,2,3,3,2,3,4,3,3,3,3,4,2,3,4,2,2,3,3,2,3,3,4,3,3,3,3,3,2,3,4,3,3,3,3,3,2,3,4,3,2,3,3,4,3,3,4,4,2,2,3,2,3,3,4,3,1,2,3,3,2,3,4,2,3,2,3,2,3,3,4,3,2,3,3,4,2,3,4,3,3,2,3,2,2,3,4,3,2,3,3,3,2,3,4,4,2,3,3,2,2,3,4,3,3,2,3,4,3,3,4,2,2,3,3,3,3,3,4,2,2,2,3,3,3,3,4,2,3,2,3,3,2,3,4,3,3,2,3,4,3,3,4,3,2,2,3,3,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,3,3,3,4,3,2,2,3,4,2,3,4,2,3,2,3,3,3,3,4,2,3,3,3,3,3,3,4,2,3,3,3,2,3,3,4,3,2,2,3,4,3,3,4,3,2,3,3,3,3,3,4,3,3,2,3,3,3,3,4,4,3,2,3,2,2,3,4,3,2,3,3,4,2,3,4,3,2,3,3,1,2,3,4,2,3,2,3,3,2,3,4,3,2,3,3,2,3,3,4,3,2,3,3,4,2,3,4,2,2,3,3,3,2,3,4,2,3,2,3,3,3,3,4,3,3,2,3,2,2,3,4,3,3,3,3,4,2,3,4,3,3,3,3,2,3,3,4,3,2,2,3,3,3,3,4,2,3,2,3,3,2,3,4,3,3,3,3,4,3,3,4,3,2,3,3,3,2,3,4,2,3,2,3,3,2,3,4,4,2,3,3,2,3,3,4,3,3,2,3,4,2,3,4,3,3,2,3,3,3,3,4,3,2,3,3,3,2,3,4,3,3,2,3,2,3,3,4,3,3,2,3,4,2,3,4,2,2,3,3,2,3,3,4,2,2,3,3,3,2,3,4,3,3,2,3,3,2,3,4,3,3,3,3,4,3,3,4,3,1,2,3,2,2,3,4,2,3,2,3,3,3,3,4,2,2,3,3,3,3,3,4,3,2,2,3,4,3,3,4,3,3,3,3,3,2,3,4,3,2,3,3,3,3,3,4,4,3,2,3,2,2,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,3,3,4,3,3,2,3,3,3,3,4,2,3,2,3,3,2,3,4,3,2,3,3,4,2,3,4,3,3,2,3,2,2,3,4,3,3,3,3,3,2,3,4,3,2,3,3,2,3,3,4,3,3,2,3,4,3,3,4,4,2,3,3,3,2,3,4,2,2,2,3,3,3,3,4,3,2,3,3,2,2,3,4,3,3,2,3,4,2,3,4,3,3,3,3,2,2,3,4,3,2,2,3,3,2,3,4,4,3,3,3,3,3,3,4,3,2,3,3,4,3,3,4,1,2,3,3,2,2,3,4,2,2,3,3,3,3,3,4,2,3,3,3,2,3,3,4,3,2,2,3,4,2,3,4,2,3,2,3,2,3,3,4,2,2,3,3,3,3,3,4,3,2,2,3,3,3,3,4,3,3,2,3,4,2,3,4,2,2,3,3,3,3,3,4,3,3,2,3,3,2,3,4,3,2,2,3,3,3,3,4,3,2,3,3,4,3,3,4,3,3,2,3,2,3,3,4,2,3,3,3,3,2,3,4,4,3,3,3,2,2,3,4,3,2,3,3,4,2,3,4,2,3,2,3,3,2,3,4,3,3,3,3,3,3,3,4,2,3,3,3,2,2,3,4,3,3,2,3,4,3,3,4,2,2,2,3,3,3,3,4,3,2,2,3,3,2,3,4,3,3,3,3,2,2,3,4,3,3,3,3,4,3,3,4,3,1,2,3,2,2,3,4,3,3,2,3,3,2,3,4,3,2,3,3,2,3,3,4,3,2,2,3,4,2,3,4,3,2,2,3,3,2,3,4,2,3,3,3,3,3,3,4,4,2,2,3,3,2,3,4,3,3,2,3,4,2,3,4,2,2,3,3,3,2,3,4,3,3,3,3,3,3,3,4,2,3,2,3,3,3,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,2,3,4,2,3,3,3,3,3,3,4,3,2,2,3,2,3,3,4,3,2,2,3,4,2,3,4,2,3,3,3,2,3,3,4,2,3,3,3,3,2,3,4,3,2,2,3,2,3,3,4,3,3,3,3,4,2,3,4,3,3,3,3,2,3,3,4,3,2,2,3,3,3,3,4,4,3,2,3,3,3,3,4,3,2,2,3,4,3,3,4,3,2,2,3,1,2,3,4,2,3,2,3,3,2,3,4,2,3,3,3,2,2,3,4,3,3,2,3,4,2,3,4,3,3,2,3,3,3,3,4,2,3,3,3,3,3,3,4,3,2,2,3,3,2,3,4,3,2,3,3,4,2,3,4,4,2,3,3,2,3,3,4,3,2,3,3,3,2,3,4,2,3,3,3,2,2,3,4,3,2,3,3,4,3,3,4,3,2,2,3,2,2,3,4,2,3,3,3,3,3,3,4,4,3,3,3,3,3,3,4,3,2,2,3,4,2,3,4,3,3,3,3,3,2,3,4,2,3,2,3,3,3,3,4,3,2,3,3,2,2,3,4,3,3,2,3,4,3,3,4,2,3,3,3,2,3,3,4,3,2,2,3,3,2,3,4,3,3,2,3,3,2,3,4,3,3,3,3,4,3,3,4,2,3,3,3,3,2,3,4,2,1,2,3,3,2,3,4,2,2,2,3,3,3,3,4,3,2,2,3,4,3,3,4,3,3,2,3,3,2,3,4,2,2,3,3,3,2,3,4,4,2,3,3,3,3,3,4,3,3,2,3,4,3,3,4,3,2,3,3,2,3,3,4,2,2,2,3,3,3,3,4,2,2,2,3,3,3,3,4,3,2,2,3,4,3,3,4,3,3,3,3,2,2,3,4,2,3,2,3,3,2,3,4,3,3,3,3,2,3,3,4,3,3,2,3,4,3,3,4,3,3,2,3,3,2,3,4,2,2,3,3,3,3,3,4,3,3,2,3,3,2,3,4,3,2,2,3,4,2,3,4,3,2,3,3,3,3,3,4,3,3,2,3,3,2,3,4,4,3,2,3,2,2,3,4,3,3,3,3,4,2,3,4,4,2,2,3,3,3,3,4,2,3,3,3,3,2,3,4,1};
        return dp[n];
    }
};

没换行的时候看着没多少代码,自动折行显示之后有40000个元素的数组就看着很大了。

image.png

2021.6.11 每日一题下面的题

1673. 找出最具竞争力的子序列

这道题题目描述比较具体,但不形象,还有一个形象但不具体的题面:402. 移掉K位数字

去翻一下 402 这道题的题解,里面有很多方法,而且力扣里面也有很多类似的题被人汇总起来了。这种题应该能考很多种算法,然后根据时间要求和空间要求卡死在其中某几种算法上。我得在多做些题才能总结出来,这里留个坑,日后要总结这类题的各种解法和复杂度。

如果也用单调队列来做的话,这道题的思路就是按着顺序取出最小的数,扔掉不需要的,最多扔掉原始长度减去目标长度这么多的元素,用一个变量来维护还需要扔掉多少个元素。

如果遍历完了数组,发现还需要扔掉一些数,从末尾开始扔,这就是为什么要单调队列,操作队尾很方便。


class Solution {
public:
    vector<int> mostCompetitive(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int> mono_inc_stk;
        int max_del_cnt = n - k;
        for (int i = 0; i < n; i++) {
            while (!mono_inc_stk.empty() && mono_inc_stk.back() > nums[i] && max_del_cnt > 0) {
                mono_inc_stk.pop_back();
                max_del_cnt -= 1;
            }
            mono_inc_stk.push_back(nums[i]);
        }
        while (mono_inc_stk.size() > k) {
            mono_inc_stk.pop_back();
        }
        return mono_inc_stk;
    }
};

image.png

小结

物品无限背包问题,数学解法降维打击,数表解法降维打击,单调队列破解删元素问题

参考链接

移掉K位数字官方题解