摘要:
题目 分析 很难想到方向,但有方向了就很easy了。 我们如何减少不必要的计算? 如果我们知道了$ 100111 $的相容的数,$ 100101 $的相容数和他是完全一样的。 我们就靠着这个思想写一下就行了。 注意位运算优先级。 代码 1 #include <bits/stdc++.h> 2 usi 阅读全文
摘要:
题目 分析 这种题不会做 吃枣药丸。。。。。 想到状压已经经过的点。 然后更新时枚举两个点加进去。 复杂度$ {O(2^n \times n^2)}$。 凉凉。 真正的做法是每一个状态只要找到一组解就break。这样可以省掉一层n。 大致上就像lrj紫书的dp例题一样,反正这个点都要选,那就先选了他 阅读全文
摘要:
题目 分析 用$ dp[i][j] $表示用i个节点,有多少深度小于等于j的二叉树。 答案是$ dp[n][n] - dp[n][h-1] $ 转移时枚举左子树的节点数量,就可以知道右子树的节点数量。不断相乘加到$ dp[i][j] $上。 代码 1 #include <bits/stdc++.h> 阅读全文
摘要:
题目 分析 洛谷题解里有一位大佬讲的很好。 就是先用栈预处理出可以匹配的左右括号在数组中设为1 其他为0 最后求一下最长连续1的数量。 代码 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6+10; 4 ch 阅读全文
摘要:
题目 分析 求结尾0的数量QwQ。 10只能是$ 2 \times 5 $,我们预处理出每个数因子中2和5的数量。 我们接着dp出从左上到右下的经过的最少的2的数量和最少的5的数量。两者取min后就是答案。 特判数据中有0的情况,把他当做10处理。如果此时答案大于1,那么把答案更新成1。因为0只有1 阅读全文
摘要:
题目 分析 dp基础题。 $ dp[i][j] $表示前i个数分成j组的最大和。 转移显然。 吐槽:做cf题全靠洛谷翻译苟活。 代码 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const i 阅读全文
摘要:
题目 分析 军训完状态不好QwQ,做不动难题,于是就学了下模拟退火。 之前一直以为是个非常nb的东西,主要原因可能是差不多省选前我试着学一下但是根本看不懂? 骗分利器,但据说由于调参困难,很多情况比不上多点爬山? 总体来说模拟退火的精髓就是: 可以看到T越大,转移的概率越高。 exp是在cmath里 阅读全文