摘要:
##题意 将一堆正整数分为2组,要求2组的和相差最小。 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的。 ##思路 a[i]是每个元素 = 01背包中的价值v[i],同时也是w[i] 因为需要两个数组和的差尽可能小,我们可以假设差为0,那么说明和 阅读全文
摘要:
##一般/朴素Dijkstra ##堆优化后的Dijkstra ##Floyd ###SPFA ##BF ##参考 https://blog.csdn.net/GD_ONE/article/details/104203571 阅读全文
摘要:
子串和子序列区别 子串:连续 子序列:不连续 最长上升/递增子序列LIS 最长上升子序列的个数: 输出该序列: 输出该序列长度:https://www.cnblogs.com/OFSHK/p/14666987.html 最长连续上升子序列:https://www.cnblogs.com/OFSHK/ 阅读全文
摘要:
例题:力扣674 代码和例题无关,不是例题的AC代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; #define inf 0x3f3f3f3f const int N=1010; int a[N],dp[N]; 阅读全文
摘要:
##题意 求给定数组中最大上升子序列和 比如样例: 4 5 1 2 10 -> 15 ##思路 模板题,dp写。 ##注意 需要注意的地方写在代码里了。 关于写dp的题目,一定要有个全局观和注意细节,一些边界条件需要多想想多去判断一下,并且去考虑有没有条件根本就不在大部分要求中,需要我们特殊判断的。 阅读全文
摘要:
##思路 最长上升子序列的变形+记录路径 ##AC代码 #include<iostream> #include<cmath> #include<string.h> #include<algorithm> #include<stdio.h> #include<iomanip> #define inf 阅读全文
摘要:
##题意 求最长上升子序列长度 ##思路 本题直接用dp写,会超时,需要优化 优化办法:二分+dp ##AC代码 //4test n //6 p //4 2 6 3 1 5 ->3 //10 //2 3 4 5 6 7 8 9 10 1 ->9 //8 //8 7 6 5 4 3 2 1 ->1 / 阅读全文
摘要:
##题意 输出最长上升子序列的长度。 ##思路 有三种解法: dp - O(n^2)(下面的AC代码一) 贪心+二分 - O(nlogn)的(下面的AC代码二) 树状数组优化的dp - O(nlogn) ##AC代码一 思路:dp,时间复杂度:O(n^2) #include<bits/stdc++. 阅读全文
摘要:
##题意 100的阶乘有多少个约数? ##唯一分解定理 唯一分解定理:N = p1a1*p2a2p3^a3 ... *pn^an(其中p1、p2、... pn为N的因子,a1、a2、... 、an分别为因子的指数) 求N的因子个数:sum=(1 + a1)*(1 + a2)*(1 + a3)*... 阅读全文
摘要:
##题意 ##注意 首先我们要明确的一点就是:数组里面是无法存负数下标的,可以存负数。所以题目中给的(0,0)点,如果我们从该点bfs的话,会造成数组越界的情况 针对第一点的问题,有两个解决办法。第一办法是:给出的四个坐标每一个都去加上2020;第二个办法就是用map去进行存储 ##思路 除去上面需 阅读全文