自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 chenchen的自述

这里是引用关于蒟蒻chenchen的自述:你是第 个暴打我的巨佬,欢迎

2020-07-31 23:18:16 890

原创 chenchen题解:CSP-J2019第二次错题整理

下面是关于CSP-J2019的第二次错题整理:解释:挨个试,对于每一个数x从二开始试,直到根号x#include<cstdio> using namespace std; int n, m; int a[100], b[100];int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++i) a[i] = b[i] = 0; for (int i =

2020-10-08 16:26:58 970 1

原创 chenchen题解:2008普及

下面是关于NOIP2008的整理:完全二叉树共有2*n-1个结点,则它的叶结点数是( )解释:面向对象程序设计(Object-Oriented Programming)是一种程序设计的方法论,它将对象作为程序的基本单元,将数据和程序封装在对象中,以提高软件的重用性、灵活性和扩展性。下面关于面向对象程序设计的说法中,不正确的是( )。解释:选项:面向对象程序设计通常采用自顶向下设计方法进行设计,是错误的。程序设计的方法包括:结构化设计和面向对象设计方法。结构化的程序设计通常采用自顶向下的设计

2020-10-07 17:02:55 256

原创 chenchen题解:

下面是关于NOIP2013普及组的错题整理:由于这次的题非常简单,所以就只有一个错题:解释:第一个图片大致意思就是用一个额外的b数组作为暂时保存换后的容器,将a[1]~a[p]和a[n-p] ~a[n]区间交换。第二个图片就是加一重循环,i从后面那段开始,j从开头开始,经过tmp作为临时容器,交换区间。①因为要换到后面,且每次要往后一个,所以是n – p + i②将后面的换到前面,所以是a[i]③换后点数还是n,所以是n④j是从i往前枚举的位置所以是i – p + 1⑤最后将tm

2020-08-28 16:25:53 164

原创 chenchen题解:CSP-J 2019题解

下面是关于CSP-J 2019的错题整理:#include<cstdio>using namespace std;int n, m;int a[100], b[100];int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++i) a[i] = b[i] = 0; for (int i = 1; i <= m; ++i) { int

2020-08-28 15:09:37 532

原创 chenchen题解:CSP-S 2019

下面是关于CSP-S 2019的错题整理:解释:C这个题的数据不算很多,我们可以穷举:

2020-08-28 11:42:01 172

原创 chenchen题解:NOIP2018-S

下面是关于NOIP2018提高组的错题整理为了统计一个非负整数的二进制形式中 1 的个数,代码如下:int CountBit(int x){ int ret = 0; while (x) { ret++; ________; } return ret;}解释:x & = x - 1可以将一个非负整数x最低位的1变为0。除此之外,x -= lowbit(x)也可以实现同样的效果,lowbit(x) =

2020-08-27 11:53:08 1266 1

原创 chenchen题解NOIP2016-S

下面是NOIP2016-S的错题整理假设某算法的计算时间表示为递推关系式则算法的时间复杂度为( )解释:代入法求时间复杂度:所以:一个 1×8 的方格图形(不可旋转)用黑、白两种颜色填涂每个方格。如果每个方格只能填涂一种颜色,且不允许两个黑格相邻,共有_____种填涂方案。解释:总方案数 = 1+8+21+20+5=1+8+21+20+5=55...

2020-08-26 16:52:26 909 1

原创 chenchen题解NOIP2017-J

下面是NOIP2017普及组错题整理2017 年 10 月 1 日是星期日,1999 年 10 月 1 日是( )解释:从1999到2017一共有18年,其中闰年有5年:2000,2004,2008,2012,2016因为(4+5)%7=2,所以1999年比2017年的星期日早两天,所以是星期五若串 S=“copyright”,其子串的个数是( )。解释:长度为0的字串为1个长度为1的字串有9个…所以一共有:1+9+8+···+1=46种设 A 和 B 是两个长为

2020-08-26 15:56:54 633

原创 chenchen2005:NOIP2017-S

设 A和 B 是两个长为 n 的有序数组,现在需要将 A 和 B合并成一个排好序的数组,请问任何以元素比较作为基本运算的归并算法最坏情况下至少要做 ( ) 次比较。解释:归并排序的最坏情况,则为每次分的两边的大小都是1,和n-1个。这样的话,分开归并的次数就最多,所以就为logn次,又因为合并时要循环n次,则为O(n∗logn) O(n*logn) O(n∗logn)小明要去南美洲旅游,一共乘坐三趟航班才能到达目的地,其中第 1 个航班准点的概率是 0.9,第 2 个航班准点的概率为 0....

2020-08-26 15:26:13 901

原创 chenchen2005:NOIP2016-J

下面是NOIP2016普及组初赛错题整理一棵二叉树如右图所示,若采用二叉树链表存储该二叉树(各个结点包括结点的数据、左孩子指针、右孩子指针)。如果没有左孩子或者右孩子,则对应的为空指针。那么该链表中空指针的数目为( )解释:把每一个叶子结点和只有一个孩子的结点算一下就行,所以是6G 是一个非连通简单无向图,共有 28 条边,则该图至少有( )个顶点。解释:根据公式(8−1)∗8/2(8-1)*8/2(8−1)∗8/2得到28条边,然后增加一个节点使其成为非连通图。所以为9(交朋

2020-08-25 16:56:57 571

原创 chenchen题解:NOIP2010-J

下面是NOIP2010普及组初赛错题整理设 X、Y、Z 分别代表三进制下的一位数字,若等式 XY+ZX=XYX在三进制下成立,那么同样在三进制下,等式XY*ZX=解释:最低位,Y + X = X,则Y必为0在这里插入代码片最高位,X + Z = XY,则Z = 2, X = 1所以:XY * ZX = 10 * 21 = 210 = ZXY前缀表达式“+3*2+5 12”的值是( )解释:前缀表达式的计算机求值:从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出

2020-08-25 16:19:17 2530

原创 chenchen题解:NOIP2015-J

下面是NOIP2015提高组初赛错题整理前序遍历序列与中序遍历序列相同的二叉树为()只有根节点或非叶子节点只有右子树的二叉树解释:看图如果根的高度为 1,具有 61 个结点的完全二叉树的高度为:解释:代入公式:完全二叉树节点数n=2n−1n=2^n-1n=2n−1所以最后答案是6重新排列 1234 使得每一个数字都不在原来的位置上,一共有( )种排法。解释:这题的数据量很小,直接穷举2143241323413142341234214123432143

2020-08-25 15:32:44 275

原创 chenchen题解:NOIP2015-S

具有 n 个节点,e 条边的图采用邻接表存储结构,进行深度优先遍历和广度优先遍历运算的时间复杂度为( O(e+n))解释:因为在遍历时我们有st数组来防止重复访问,故没每一个节点只访问一次,所以是e+n双向链表中有两个指针域,llink 和 rlink,分别指回前驱及后继,设 p 指向链表中的一个结点,q 指向一待插入结点,现要求在 p 前插入 q,则正确的插入为( )p->llink->rlink=q;q->rlink=p;q->llink=p->lli...

2020-08-25 12:02:49 469

原创 chenchen2005:朴素版多重背包问题

题目描述:blablablablablablablablablabla 传送门算法思想:核心:这个我们可以直接将它看成01背包来解决。即若有k件a种物品,则把它拆成k个相同的物品,用for循环来枚举a物品取多少个(k)状态表示:f[i][j] 表示前i件物品,当背包容量为j时的最大价值状态转移:f[i][j]=max(f[i][j],f[i-1][j-k*v[i]]+k*w[i])注意判断k<=s[i] && k*v[i]<=j时间复杂度O(n∗m∗log

2020-08-06 17:00:28 110

原创 chenchen题解:最短编辑距离

题目描述:blablablablablablablablablabla 传送门算法思想:状态表示:dp[i][j]表示将字符串A中前i个字符编辑成字符串B中前j个字符所要进行的最少操作状态计算,根据操作将集合划分为3类:删除–将字符串A中的某个字符删除,操作次数dp[i-1][j] + 1插入–在字符串A的某个位置插入某个字符,操作次数dp[i][j-1] + 1替换–将字符串A中的某个字符替换为另一个字符,需要分两种情况讨论:I. a[i]==b[j],操作次数dp[i-1][j-1

2020-08-06 14:15:26 138

原创 chenchen题解:最长公共子序列

题目描述:blablablablablablablablablabla 传送门算法思想:又是一道dp题状态表示:f[i][j]表示从i到j段最长公共子序列的长度状态转移:①a[i]于b[j]相等时长度就等于上一个的加1f[i][j]=f[i-1][j-1]+1②a[i]于b[j]不相等时就等于f[i-1][j]和f[i][j-1]中最大的f[i][j]=max(f[i-1][j],f[i][j-1])时间复杂度:O(m∗n) O(m*n) O(m∗n)代码实现:#include

2020-08-06 14:06:54 2087

原创 chenchen题解:最长不下降子序列

题目描述:blablablablablablablablablabla 传送门算法思想:动态规划题:状态表示:dp[i]表示到i个字符的最长不下降子序列的长度状态转移:当该子序列为不下降子序列且长度比当前的maxx长,就更新maxx时间复杂度:O(n2) O(n^2) O(n2)代码实现:#include <bits/stdc++.h>using namespace std;const int N=5010;int a[N], dp[N]; int main(){

2020-08-06 13:50:59 144

原创 chenchen题解:最长不下降子序列

题目描述:blablablablablablablablablabla 传送门算法思想:dp题状态表示:dp[i]表示到i个字符的最长不下降子序列的长度状态转移:每当当前的子序列为上升且长度大于maxx时,就更新maxx时间复杂度:O(n2) O(n^2) O(n2)代码实现:#include <bits/stdc++.h>using namespace std;const int N=5010;int a[N], dp[N]; //dp[i]表示到i个字符之前的最长不下

2020-08-06 11:28:33 132

原创 chenchen题解:数字三角形

题目描述:blablablablablablablablablabla 传送门算法思想:这道题是坐标动态规划的典型题,首先我们定义状态f[i][j]为以i,j为起点的最短距离。接下看状态转移:对于每一个点,都可能由它上方的点或左上方的点转移而来,所以我们只需要在这两个点间取最短就行。即:f[i][j]=a[i][j]+min(f[i+1][j],f[i+1][j+1]);注意,从前往后遍历时需要判断该点是否越界,所以因为我懒 为了使代码更简洁,我采用了从后向前遍历的方法。时间复杂度:

2020-08-06 10:43:11 175

原创 chenchen题解:滑雪(记忆化搜索)

题目描述:blablablablablablablablablabla 传送门算法思想:显然,这道题属于bfs。但是,我们可以发现,如果暴力广搜,以a为起点的最长路径可能会被算很多遍,所以。可以用记忆化搜索来剪枝,f[i][j]表示以i,j为起点的最长路径的长度。每次求出来就保存一下,下次搜索就直接用就行了,不用再搜一遍。最后,遍历每个点为起点的最短距离,打擂台求最大就行。时间复杂度:O(n∗m)        &nb

2020-08-06 10:12:40 167

原创 chenchen题解:朴素版Dijkstra求最短路

题目描述:blablablablablablablablablabla 传送门算法思想:由题可知,此题为稠密图,所以用邻接矩阵来存,下面是代码中几个变量的含义:dist[i] 表示由起点到i点的最短距离g[i][j] 存图,表示从i点到j点的直接距离(不经过松弛操作的距离)st[i] 表示i位置的点的最短距离是否已经确定n,m 节点数和边数下面是具体步骤:在最短路未确定的点中,找距离源点最近的点t用t更新其他点的距离(松弛操作)注意事项:存图之前,现将g数据初始化为无限大,因为

2020-08-03 16:36:53 131

原创 7.20~7.31集训题目整理:

7.20~7.31集训题目整理:图论:最短路问题朴素Dijkstra算法 堆优化版DijkstraI 题解有边数限制的最短路spfa 算法(队列优化的Bellman-Ford算法) 题解spfa判断图中是否存在负环 floyd算法 最小生成树问题最小生成树-朴素版prim算法 Kruskal算法求最小生成树染色法判定二分图二分图的最大匹配数据结构:链表单链表双链表栈模拟栈单调栈队列滑动窗口并查集合并集合连通块中点的数量(维护size的并查集)堆堆

2020-07-31 16:07:19 831

原创 chenchen题解:最短Hamilton路径

题目描述:blablablablablablablablablabla 传送门算法思想:这道题是状压dp的典型题状态表示:dp[i][j]表示从0到j点所有经过点为i的二进制形式的最短Hamilton路径的长度。数i的二进制形式表示点0 ~ n - 1每个点是否被走过例如 i = 10,二进制表示为1010,表示1、3号点走过,0、2号点没有走过状态计算:考虑要走到j点之前,要经过的前一个点(设其编号为k),将集合分为n份,取最小值dp[i][j] = min(dp[i - {j}][k

2020-07-29 11:46:07 139

原创 chenchen题解:没有上司的舞会

题目描述:blablablablablablablablablabla 传送门算法思想:对于每一个人,只有去或不去两种情况,即用dp[u][0]表示在以u为根的子树中,选择不包含u结点的最大的快乐指数dp[u][1]表示在以u为根的子树中,选择包含u结点的最大快乐指数状态计算:dp[u][0] = sum { max {dp[s][0], dp[s][1]} }, s为u的子结点dp[u][1] = sum { dp[s][0] }, s为u的子结点时间复杂度:O(n) O(n) O(n

2020-07-29 11:28:15 126

原创 chenchen题解:最短编辑距离

题目描述:blablablablablablablablablabla 传送门算法思想:状态表示:f[i][j]表示将字符串A中前i个字符编辑成字符串B中前j个字符所要进行的最少操作状态计算,根据操作将集合划分为3类:删除–将字符串A中的某个字符删除,操作次数f[i-1][j] + 1插入–在字符串A的某个位置插入某个字符,操作次数f[i][j-1] + 1替换–将字符串A中的某个字符替换为另一个字符,需要分两种情况讨论:I. a[i]==b[j],操作次数f[i-1][j-1]II

2020-07-28 16:01:06 163

原创 chenchen题解:直线石子合并

题目描述:blablablablablablablablablabla 传送门算法思想核心:最后一次合并一定是左边连续的一部分和右边连续的一部分进行合并状态表示:f[i][j] 表示将 i 到 j 合并成一堆的方案的最小代价枚举每个子区间[i,j]计算合并该子区间的最小代价枚举k把子区间分成两堆 : [i, k] [k + 1, j]把这左右两堆合并的最小代价为 : 合成左堆本身需要最小代价 + 合成右堆本身需要最小代价 + 再这两堆合成在一起的代价,即为:b[i][k]+b[k+1][j]

2020-07-28 15:35:14 794 1

原创 chenchen题解:完全背包问题

题目描述:blablablablablablablablablabla 传送门算法思想&具体分析:朴素版(二维数组,三重循环)也是两种选择,选或不选,只不过每个物品可以选无限次,在01的基础上把f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i])改为f[i][j]=max(f[i][j],f[i][j-k*v[i]]+k*w[i])01背包题解传送门(此处的k表示选k件物品i)时间复杂度:趋近于O(n∗m2) 趋近于O(n*m^2) 趋近于O(n∗m

2020-07-28 15:21:42 195 1

原创 chenchen题解:01背包问题

题目描述blablablablablablablablablabla 传送门算法思想&具体分析朴素版(二维空间):每件物品只能选一次,对于每种物品,我们有两种选择1.不选 -> f[i][j]=f[i-1][j]等于选前i-1个物品,空间为j情况下的最优解2.选 -> f[i][j]=f[i-1][j-v[i]]+w[i]如果选的话,前i-1个物品的体积最多为j-v[i]在这两种情况中取较大值即可,即为当前情况的最优解,我们的每一步都是从上一步的最 优解转移过来,所

2020-07-28 15:01:19 216 2

原创 chenchen题解:Trie字符串统计

题目描述维护一个字符串集合,支持两种操作:1.“I x”向集合中插入一个字符串x;“Q x”询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过 10^5 ,字符串仅包含小写英文字母。输入格式第一行包含整数N,表示操作数。接下来N行,每行包含一个操作指令,指令为“I xIx”或“Q xQx”中的一种。数据范围:1<n<2∗104 1<n<2*10^4 1<n<2∗104输出格式对于每个询问指令“Q x,都要输出一个整数作为结果,

2020-07-22 16:15:40 288 1

原创 chenchen题解:spfa算法求最短路

题目描述给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。数据保证不存在负权回路。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出”impossible”。数据范围1≤n,m≤105,图中涉及边长绝对值均不超过10000。输入样例:3

2020-07-21 16:50:30 258

原创 chenchen题解:Dijkstra求最短路堆优化版

Description:给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入:第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。数据范围1≤n,m≤1.5×10^51≤n,m≤1.5×10 ^5图中涉及边长均不小于0,且不超过10000。输出:输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。样例输入:3 3

2020-07-20 16:05:49 207

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除