摘要:
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 10010; 4 int d[N]; 5 int main(){ 6 int n, p, h, m; 7 set<pair<int, int>> existed; // 阅读全文
摘要:
贪心加差分,不愧是拔高的题目,好题 主要有一点不好理解,为什么最终所有可能的序列是abs(pos - neg) + 1种 pos和neg中的小者就是b[i]和b[j]一正一负配对时+1-1操作的数量剩余的|pos-neg|就是落单的差分序列中的正数或负数b[k],这些差分序列剩余的正数或负数b[k] 阅读全文
摘要:
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 5010; 4 int g[N][N]; 5 int main() { 6 int n, r; 7 cin >> n >> r; 8 int nn = r, mm = 阅读全文
摘要:
膜拜大佬的题解:https://www.acwing.com/solution/content/16524/ 递归+分治的思路好理解,因为这个题目中最显著的特点就是,不断地重复旋转复制,也就是N级城市,可以由4个N−1级城市构造,因此我们每次可以不断地分形N−1级,将问题范围不断地缩小 注意坐标是按 阅读全文
摘要:
分治:分治法把一个问题划分为若干个规模更小的同类子问题,对这些子问题递归求解,然后 在回溯时通过它们推导出原问题的解 首先把A分解质因数:A = p1 ^ k1 * p2 ^ k2 * ... * pn ^ kn 然后A一共的约数个数是: (k1 + 1) * (k2 + 1) * ... * (k 阅读全文
摘要:
Hanoi塔问题的原型 问题描述:现在有n个圆盘从上往下从小到大叠在第一根柱子上,要把这些圆盘全部移动到第三根柱子要怎么移动呢?请找出需要步骤数最少的方案 转载自https://blog.csdn.net/liujian20150808/article/details/50793101 转载开始 首 阅读全文
摘要:
解题思路:每一行每一个开关是否需要操作完全由上一行灯的亮灭状态所决定。 所以用二进制枚举第一行开关的操作情况。 第一行灯的亮灭状态确定后,整个5*5所有灯的亮灭状态就确定了。 因为最后一行没有下一行了,所以判断最后一行是否全为亮,若不全为亮就是不合题意。 1 #include <bits/stdc+ 阅读全文
摘要:
方法一:c++自带的next_permutation函数 1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[15]; 4 int main() { 5 int n; 6 cin >> n; 7 for (int i = 0; i < 阅读全文
摘要:
方法一:dfs加剪枝 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 30; 4 int n, m; 5 int way[N]; //方案 6 void dfs(int u, int start) { //u表示当前 阅读全文
摘要:
方法一:二进制状态枚举 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 20; 4 int n; 5 int main() { 6 cin >> n; 7 for (int i = 0; i < (1 << n); 阅读全文