![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
lyx_2016
蒟蒻,OIer
展开
-
【LCP19】【DP】每日一题day29
天哪!LeetCode的每日一题终于不是树啦!前几天觉得题目类型有些重复,都是一看就会写的_(:з」∠)_ 开始了动态规划!字符串!!正是我薄弱的地方,希望接下来一个月都是这些能让我好好学习学习这道题一眼就能看出来是我不会的dp。因为[红,黄,红]每一块的长度不固定,真的不知道该怎么设定它的状态,如何状态转移也毫无头绪,好像当前叶子和它的前一片叶子关系不大。我们试着按照动态规划的思路来分析一下:一、...原创 2020-10-02 11:02:59 · 160 阅读 · 0 评论 -
【LeetCode968】【贪心】每日一题day23
题面:给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。一遇到这种题我就一点办法没有TvT一开始觉得,是dp吧,很明显是要从子节点推上来。但是子节点就那么几种情况,而且每种情况下当前节点要做出什么选择也是确定的,因此当前节点的选择与子节点是如何走过来的无关,所以不是dp是贪心。那么考虑状态,放相机和没放相机,但是没放相机的时候又要分为需要放和不需要放。于是:0 表示当前节点需要被监控1 当前节点没放原创 2020-09-22 10:22:39 · 68 阅读 · 0 评论 -
【LeetCode78】【位运算/递归】每日一题day21
这个是在补之前的题。这道题就是让你输出一个无重复数字的序列的全部子集,听起来hin简单,但是我却想不出来怎么做。看了题解之后两种方法都很简单,但是我自己又不会写。方法一:每一个数字有取和不取两种状态,想到了什么?二进制。于是每次+1就可以枚举出所有情况class Solution {public: vector<int> t; vector<vector<int>> ans; vector<vector<int>>原创 2020-09-21 19:29:39 · 96 阅读 · 0 评论 -
【LeetCode37】【回溯】每日一题day18
这道题是补的前几天的题,是我在写LeetCode79单词搜索的时候错过的【社团出去聚餐了quq】这道题又零零散散写了三天。一眼就能看出来是回溯,但是具体要怎么写一时间我还想不出来,感觉限制条件太多,比N皇后还要复杂。之后看了一眼题解,维护三个bool数组col[9][10], row[9][10], block[3][3][10]。col[i][j]表示j这个数字在第i行用没用过。之后按行来遍历回溯【按列或者块都是可以的】。思想是非常简单直白的。class Solution {public:原创 2020-09-17 22:18:25 · 82 阅读 · 0 评论 -
【LeetCode685】【并查集】每日一题day17
昨天day16做了一道二叉树的翻转,迭代或者递归都行,很简单没啥好说的。今天这个并查集…我反省,我没看出来。给你一棵有n个节点,n条边的树,让你找出那条多余的边。考虑有两种情况:1、冲突。即有一个点有两个父亲。这个可以统计每个点的入度,也可以在union的时候判断一下是不是已经有父节点了2、成环。这里用到并查集,连接两个点的时候看看它们是不是已经连上了【这里应该能看出来是并查集的】那么就可能出现三种情况:1、只成环。删掉最后一条成环的边即可。2、只冲突。删掉最后一条起冲突的边即可。3、既冲原创 2020-09-17 21:01:39 · 89 阅读 · 0 评论 -
【LeetCode 51】【N皇后/回溯】【树的遍历】每日一题 day4
参考了这篇题解N皇后问题,典型的回溯。先看暴力做法,就是把第一个皇后放在第一行第一列,然后再把第二个皇后放在第二行,这样试试试不行了就回去,但是你的棋盘已经改了,回去的话再改棋盘就很麻烦题外话:【这里可以发现就是树的前序遍历:根→子树从左到右】【树的遍历共有5中:前序(根→左子树→右子树)、中序(左→根→右)、后序(左→右→根)、bfs、dfs(一枝搜到底,再回到根节点去搜它的其他子树) 我以前不知道它们有什么用_(:з」∠)_原来是可以和实际的搜索结合起来的(看了这篇学到了)】所以我们改成回溯,关键原创 2020-09-03 22:48:26 · 98 阅读 · 0 评论 -
gcd与lcm
#include <cstdio>int gcd(int a, int b){ return b == 0 ? a : gcd(b, a % b);}int lcm(int a, int b){ return a / gcd(a, b) * b;}int main(){ int a, b; scanf("%d %d", &a, &b); printf(原创 2016-11-14 14:36:26 · 2426 阅读 · 0 评论 -
【codevs 3500】快速幂
#include <cstdio>long long a, b, c, ans;long long pow(long long a, long long b, long long c){ a = a % c; if (b == 0) { return 1; } else if (b % 2 == 1) { return原创 2016-10-31 15:51:51 · 228 阅读 · 0 评论 -
生成1~n的排列的三种方法
#include <cstdio>#include <algorithm>const int MAXN = 10;bool used[MAXN + 1];int n, a[MAXN + 1];void search(int i){ if (i == n + 1) { for (int i = 1; i <= n; i++) printf("%d%c", a[i]原创 2016-11-11 21:22:02 · 672 阅读 · 0 评论 -
并查集 按秩合并&路径压缩
并查集自己也只是会了方法,稍微有点思维难度的题就写不出来【例如银河英雄传说】,Menci教的代码。 还有Menci是把并查集写成了一个结构体,里面有各种成员函数,也超级棒。例题是HDU 1232#include <cstdio>const int maxn = 1005;int f[maxn], dep[maxn], n, m;int Find(int x) //带路径压缩 { retu原创 2016-10-31 08:23:59 · 2183 阅读 · 0 评论 -
【codevs 1287】 矩阵乘法
这道题是矩阵乘法的裸题,但是我这个蒟蒻还是花了几乎一晚上才A。一开始我定义了(ai * aj)(bi * bj)的矩阵,绕着绕着就绕晕了。 之后问了ilern(ilern的链接),定义了(m * p)(p * n)的矩阵,第一层循环m,第二层循环n,第三层循环p,答案矩阵是(m * n)的,很容易就写出来了 。#include <cstdio>const int maxn = 205;int a原创 2016-10-30 22:33:09 · 205 阅读 · 0 评论 -
【打表计划】【小澳的坐标系】 矩阵快速幂
【打表计划】题目描述CYR 想打 n n n 个表,他一次可以打一个、两个、三个或四个表,求他打 n n n 个表的方案总数。输入格式一行一个整数 n,表示 CYR 想打的表的数量。输出格式一行一个整数,表示 CYR 打表的方案数,答案对2769433 取模。测试样例样例输入 4样例输出 8数据范围与提示对于 30% 30\% 30% 的数据,n≤5; 对于 50% 50\% 50% 的数据,原创 2016-10-29 21:05:34 · 700 阅读 · 0 评论 -
【Rqnoj28】愚蠢的宠物 最近公共祖先
本来想学并查集的,看了黄学长的博客,有道题叫《愚蠢的宠物》,就看了看,然而这道题和并查集并没有多大关系,而是一道最近公共祖先的题,就学了最近公共祖先,以这道题为例,我所了解的求法有3种:1、是黄学长的方法。记录x和y到每个节点的路径长度,求到每个节点的路径长度和,最小的一个就是答案。代码是黄学长的#include <cstdio>#include <cstring>#include <algor原创 2016-10-18 19:34:54 · 305 阅读 · 0 评论 -
高精除
#include <cstdio>#include <iostream>#include <cstring>#include <string>using namespace std;int a[101], b[101], c[101], la, lb, lc;void init(int a[]) //这里的a[]相当于一个变量,实际上输出的可以输数组b或者数组c,不能省略{ str原创 2016-11-07 08:01:34 · 494 阅读 · 0 评论