Leetcode 每日一题和每日一题的下一题刷题笔记 11/30
写在前面
这是我参与更文挑战的第11天,活动详情查看:更文挑战
快要毕业了,才发现自己被面试里的算法题吊起来锤。没办法只能以零基础的身份和同窗们共同加入了力扣刷题大军。我的同学们都非常厉害,他们平时只是谦虚,口头上说着自己不会,而我是真的不会。。。乘掘金鼓励新人每天写博客,我也凑个热闹,记录一下每天刷的前两道题,这两道题我精做。我打算每天刷五道题,其他的题目嘛,也只能强行背套路了,就不发在博客里了。
本人真的只是一个菜鸡,解题思路什么的就不要从我这里参考了,编码习惯也需要改进,各位如果想找刷题高手请教问题我觉得去找 宫水三叶的刷题日记 这位大佬比较好。我在把题目做出来之前尽量不去看题解,以免和大佬的内容撞车。
另外我也希望有得闲的大佬提供一些更高明的解题思路给我,欢迎讨论哈!
好了废话不多说开始第十一天的前两道题吧!
2021.6.11 每日一题
这个题一看就知道是物品无限的背包问题。然后容量是当前的和 i,价值是最少需要的平方数个数 dp[i],这些平方数加起来就是当前的和 i。因为 i 是一个平方和,所以构成 i 的若干平方数开根号以后都没有 i 开根号之后大。这就定出来一个搜索范围,只要在 里面挑选,平方之后加和就能找到一个凑出 i 的组合。假设现在选到了 j 这个数,那么之后就只需要去凑出 dp[i - j * j] 就可以。接下来就可以写状态转移方程了。
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];
}
};
其实这种求和的东西一般是有数学公式的,只要自己知道,数学公式永远比其他解题套路快。这块我看题解才知道有这么个定理叫四平方和定理。
四平方和定理证明了任意一个正整数都可以被表示为至多四个正整数的平方和。这给出了本题的答案的上界。
同时四平方和定理包含了一个更强的结论:当且仅当 时, 可以被表示为至多三个正整数的平方和。因此,当 时, 只能被表示为四个正整数的平方和。此时我们可以直接返回 。
当 时,我们需要判断到底多少个完全平方数能够表示 ,我们知道答案只会是 中的一个:
答案为 时,则必有 为完全平方数,这很好判断;
答案为 时,则有 ,我们只需要枚举所有的 ,判断 是否为完全平方数即可;
答案为 时,我们很难在一个优秀的时间复杂度内解决它,但我们只需要检查答案为 或 的两种情况,即可利用排除法确定答案。
这是官方题解上的思路,这种思路一般拿来解算法题都是降维打击型的,代码逻辑会简单很多,前提是你清楚这能用公式来算,而且适用范围包括了题面给出的范围。
代码不贴了,我试一下这种解法的时间和空间排名。
降维打击恐怖如斯。
然后在评论区发现一个老哥的暴力解法,这个解法完全可以放到单片机上运行。
代码:
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个元素的数组就看着很大了。
2021.6.11 每日一题下面的题
这道题题目描述比较具体,但不形象,还有一个形象但不具体的题面: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;
}
};
小结
物品无限背包问题,数学解法降维打击,数表解法降维打击,单调队列破解删元素问题