随笔分类 - CSP
摘要:思路 拆点这种算法还是第一次见,不过能拿一点分还是可以接受吧。 主要就是说把点分为d[x][y], x表示某个点,y表示最后一次连续的小路长度。 这样对于一个d[x][y],如果它邻接的点对应的边是大路,那么就是d[u][0] = d[x][y] + w[i],否则就是d[u][y + w[i]]
阅读全文
摘要:思路 讲真的有限的东西直接暴力枚举就完事了,自己还是想太多了,这种题目应该是要拿下的。当时自己题目的意思也没理解,不应该。 代码 #include <iostream> #include <vector> using namespace std; int g[3][3]; int zeronum()
阅读全文
摘要:思路 典型的差分约束问题,只不过转化起来有点麻烦,注意转化的边界情况就行 代码 #include <iostream> #include <vector> #include <queue> #include <cstring> using namespace std; const int N = 3
阅读全文
摘要:思路 这道题是求最大值最小,所以很明显又是要用二分。自己没注意到是因为没有注意到所选边数小于等于n这个事,所以理解题意呀! 每次二分得到一个距离mid,如果能选不超过n条边,使得每条边的权值都小于mid,那么这个值就可以选。 由于这里只涉及边的个数,所以所有边的权都变成1了,所以用bfs+松弛操作就
阅读全文
摘要:思路: 这道题就是一个单点更新,区间查询的问题,所以用树状数组就行了。不过说实话,自己对第四第五题的态度需要改变一下。暴力可以,但是应该看到是运行超时,而不是错误。如果运行超时看下有没有极端情况可以跳过优化一下,不要想着暴力完了就完事了。 代码: #include <iostream> using
阅读全文
摘要:思路: 应该要将题目进行转化,转化为平时可以理解的形式。这里就是说求所有这样的点,其他点要么可以访问他,要么可以被他访问到,也就是说用两种边,一种是正向的,一种是反向的,然后dfs就行了。 代码: #include <iostream> #include <vector> #include <alg
阅读全文
摘要:思路 这道题主要还是学一下利用栈来模拟DFS的过程。只需要顺序遍历整个文本,然后对于不是此文本父节点的点弹出栈即可。同样,这个点要匹配的字符串的位置和父节点要匹配的字符串的位置相同。注意一下,如果父节点已经可以匹配了,那么这个节点还是要匹配最后一个字符串。非常牛呀这个思路,YCW YYDS! 代码
阅读全文
摘要:思路: 这道题还是很难的,不过一步步分析下来就感觉还可以。首先求最大值最小问题,肯定就是使用二分法,在所有可能的答案范围内不断二分,直到找到第一个满足要求的时间,那就是最小值。然后,对于某个酒店,它运输某个食材的最短时间是可以求出来的,用dfs。这里是用了它到所有需要食材的酒店的路径和乘以2,再出发
阅读全文
摘要:思路: 这道题用DP是肯定的。但是应该从1维DP开始看起,这里的数据ai表示1e5也说明了使用二维DP是不行的。使用一维DP,用f[i]表示a0~a[i]的所有选法数量.状态分割为所有最后一个区间的左端点,这样就可以作到不重不漏 反思: 这道题其实讲实话不算难,但是自己在考场上以现在的熟练度应该还是
阅读全文
摘要:思路: 这道题就是典型的状态压缩DP+矩阵快速幂+DFS。这里主要学的思想是如果后一个状态推前一个状态的推法是固定的,那么就是一个固定的递推方程,所以可以用矩阵加快速幂来加速。而DFS是求最初的转移矩阵的好方法,因为我们需要直到第i列是什么样子,i列之前才可以填满,而且对应的下一列j的样子才是有效的
阅读全文
摘要:思路: 这道题一开始还是暴力,得了32分。讲真的也是通过这道题了解到了矩阵快速幂这个算法,感觉在dp算法中非常好用,感谢CSP。 这里我只考虑S = 2的情况,看上一步有哪一个数能够到这一步来,然后每一次迭代就可以了,这就是递推,也是矩阵快速幂的用处。 代码: #include <iostream>
阅读全文
摘要:思路: 这道题就是简单的数学题,只不过被n维吓住了而已,只需要按照二维的思路处理n维即可。 代码: #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <cmath> using
阅读全文
摘要:思路: 这道题很明显使用BFS,因为BFS同时具有最短路径的特征,所以直接使用BFS即可 反思: 但是自己毕竟写图论的题目比较少,很多实现的细节没做好,导致最后只有30分。 总结如下: 1.如果是图中不可访问的点,那么直接将他设置为VISITED即可 2.由于BFS是每一层每一层增加的,所以对于多个
阅读全文
摘要:思路: 这道题对我来说一开始想通过枚举找规律,然后确实发现了一点规律,但是是后缀的规律,只能说没有理论证明所以导致最后的结果并不正确。 这也说明了现在靠自学成才是不可能的事,需要系统理论的学习。 这里应该使用数位DP,也就是用不同的状态表示前面的数的属性,然后每次插入数据时根据状态进行转移,这里可以
阅读全文
摘要:思路: 就是首先从S点出发,在DFS的过程中记录路径。如果路径路过了T,那么把路径上的点标作”可以到达目的地“。然后从每一个S可达但是在遍历的时候它不可以到达目的地的点开始DFS,如果它到了一个”可以到达目的地“的点,那么就把它路径上的点全部标作”可以到达目的地“。 反思: 首先这道题看题目理解题意
阅读全文

浙公网安备 33010602011771号