摘要:
第一种思路:dp 假设我们考虑到第i个数,如果说这个数是正数,我们希望第i-1个数也是个正数,越大越好,如果说第i个数是个负数,我们希望第i-1个数也是个负数,并且越小越好。 所以应该同时维护两个dp数组,dp1[i]以i结尾的连续元素的最大值,dp2[i]表示以i结尾的连续元素的最小值。 转移方程 阅读全文
摘要:
第一种思路:dp 假设我们考虑到第i个数,如果说这个数是正数,我们希望第i-1个数也是个正数,越大越好,如果说第i个数是个负数,我们希望第i-1个数也是个负数,并且越小越好。 所以应该同时维护两个dp数组,dp1[i]以i结尾的连续元素的最大值,dp2[i]表示以i结尾的连续元素的最小值。 转移方程 阅读全文
摘要:
头文件<string>,可以将int,longlong...等等一系列整型浮点型转换为字符串,注意是从C++11开始的。 std::string to_string(int value); (1) (C++11起)std::string to_string(long value); (2) (C++ 阅读全文
摘要:
给出一组数: 寻找四元组的个数 (i,j,k,l)其中a[i]=a[k],并且a[j]=a[l] 刚看到这个题的时候想到了记录每个数的个数,然后求前缀和以及后缀和。先枚举i和k,当a[i]和a[k]相等时,在枚举i和k之间的数,然后在将前缀和与后缀和相乘,但是这样复杂度是o(n^3),显然过不了。看 阅读全文
摘要:
https://leetcode-cn.com/problems/stone-game/ 定义状态数组:dp[i][j]表示还剩下i~~~j个石子时,当前选手和另一个选手的最大差值。 如果当前选手选第i个,dp[i][j]=nums[i] - dp[i+1][ j ],为什么是这样呢?假设当前选手A 阅读全文
摘要:
题解:定义状态dp[i][0/1],dp[i][0]表示选择节点i,dp[i][1]表示不选节点i。 通过树的后序遍历从根往上走, 状态转移方程 dp[i][0]=i->val+dp[i->left][1]+dp[i->right][1]; dp[i][1]=max(dp[i->left][0],d 阅读全文
摘要:
这是一个很有意思的题目,题目大意比较简单,当给出的n个数两两互质时,输出“pairwise coprime”,否则至少存在两个数不互质并且所有数的GCD=1,那么输出”setwise coprime“,如果说这俩条件都不满足的话,那就输出“not coprime”。 题解:这个问题可以转化为如何判断 阅读全文
摘要:
《背包九讲》 前言: 背包问题:有n件物品,每件物品有一定的价值,获取每件物品都需要一定的代价,背包问题就是在遵守一定的规则的情况下,获取最高的价值。 1,01背包 最基本的背包问题,其规则为每件物品要么选,要么不选。 定义状状态数组dp[i][j]表示前i个物品,当背包的容量为j时,背包可以容纳的 阅读全文
摘要:
定义状态数组dp[i]表示以i为根节点,可以走的最远距离,也可以理解为以i为根节点树的高度。 我们考虑树的直径, 假设y是直径上的一个端点,X1和x2均为y的儿子节点,我们通过回溯的思想最先求出的应该是dp[x1],此时的dp[y]=0,然后下一步更新直径的长度,maxlen=max(maxlen, 阅读全文
摘要:
题目链接:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/ 题解: 一开始想的是枚举起点然后跑BFS,这样时间复杂度为o(n^2m^2),不太好。感觉官方题解的方法很秒,记忆化搜索,时间复杂度为O(nm),简单 阅读全文
摘要:
1、图的匹配:指的是图的不具有公共端点的边的集合。 图的最大匹配指不具有公共端点的最大边数。常见的问题有二分图的最大匹配,可以用dicnic解决或者用匈牙利算法解决。 2、图的边覆盖:是边子集的一种,指的是图中的所有顶点都是边子集中的某一条边的端点。最小边覆盖用最少的边来覆盖所有的顶点。 3、图的顶 阅读全文
|