返回顶部

随笔分类 -  ABC

摘要:题意:有一个$n$x$m$的棋盘,你需要从$(1,1)\(走到\)(n,m)\(,每次可以向右,右下,下走任意个单位,\).\(表示可以走,#表示一堵墙,不能通过,问从\)(1,1)\(走\)(n,m)$的方案数. 题解:走棋盘的经典问题的改编,唯一不同的地方在于,棋子可以在某一方向移动任意距离,而 阅读全文
posted @ 2020-11-16 20:15 _Kolibri 阅读(188) 评论(0) 推荐(0)
摘要:题意:在$x$轴上,你刚开始在$0$的位置,第$i$次操作需要走$A_1,...,A_i$个单位,如果$A_i$为正向右走,否则向左走,求你所能走到的最大坐标. 题解:我们一步一步来看: 第一次走:\(A_1\). 第二次走:\(A_1,A_2\). . . . 第$n$次走:\(A_1,A_2,. 阅读全文
posted @ 2020-11-10 10:45 _Kolibri 阅读(248) 评论(0) 推荐(0)
摘要:题意:有一长度为奇数$n$的数组$a$,和长度为$m$的数组$b$,现要求从$b$中选择一个数放到$a$中,并将$a$分成$(n+1)/2$个数对,求最小的所有数对差的和. 题解:我们从$b$中选一个数出来,只和$a$中的一个元素配对,剩下的依然是$a$中$n-1$个数两两配对,所以我们可以先求个前 阅读全文
posted @ 2020-11-02 21:43 _Kolibri 阅读(227) 评论(0) 推荐(0)
摘要:题意:$f(x,m)$表示$x\ mod\ m$,\(A_{1}=1\),而$A_{n+1}=f(A^{2},M)\(,求\)\sum^A_$. 题解:多算几个,会有一个循环节,直接模拟就好了. 代码: ll n,x,m; ll mp[N]; vector<ll> a; int main() { / 阅读全文
posted @ 2020-09-22 17:37 _Kolibri 阅读(173) 评论(0) 推荐(0)
摘要:题意:给你一个数字$n$和$k$个区间,$S$表示所有区间的并的集合,你目前在$1$,每次可以从集合中选择一个数字向右移动,问有多少种方法从$1$走到$n$. 题解:我们从1开始遍历,$dp[i]$表示走到目前走到$i$的方案数,再去遍历每一个集合,用$dp[i]\(更新所有\)[i+l[j],i+ 阅读全文
posted @ 2020-09-22 17:33 _Kolibri 阅读(395) 评论(0) 推荐(1)
摘要:题意:有$n$枚硬币,每枚硬币抛完后向上的概率为$p[i]$,现在求抛完后向上的硬币个数大于向下的概率. 题解:我们用二维的$dp[i][j]$来表示状态,$i$表示当前抛的是第$i$个硬币,$j$表示的是前$i$个硬币中向上的个数,那么状态可以表示为,如果$j=0$,那么$dp[i][j]=dp[ 阅读全文
posted @ 2020-09-12 18:01 _Kolibri 阅读(338) 评论(0) 推荐(0)
摘要:题意:有一个$n$X$m$的图,"#"表示障碍物,"."表示道路,只能向右或向下走,问从左上角走到右下角的方案数. 题解:这题可以用bfs来搞,但dp更简单点吧~~.首先,只有当向右和向下都能走时,方案数才会增加,我们用dp表示从起点走到某个单位的方案数,这个单位只能从左边或上边走过来,所以它的方案 阅读全文
posted @ 2020-09-05 17:33 _Kolibri 阅读(159) 评论(0) 推荐(0)
摘要:题意:给你一张DAG,求图中的最长路径. 题解:用拓扑排序一个点一个点的拿掉,然后dp记录步数即可. 代码: int n,m; int a,b; vector<int> v[N]; int in[N]; int dp[N]; int main() { //ios::sync_with_stdio(f 阅读全文
posted @ 2020-09-05 17:23 _Kolibri 阅读(189) 评论(0) 推荐(0)
摘要:题意:有两个字符串,求他们的最长公共子序列并输出. 题解:首先跑个LCS记录一下dp数组,然后根据dp数组来反着还原路径,只有当两个位置的字符相同时才输出. 代码: char s[N],t[N]; int dp[10000][10000]; int main() { //ios::sync_with 阅读全文
posted @ 2020-09-05 17:20 _Kolibri 阅读(194) 评论(0) 推荐(0)
摘要:题意:有$n$个物品,第$i$个物品价值$v_$,体积为$w_$,你有容量为$W$的背包,求能放物品的最大价值. 题解:经典01背包,但是物品的最大体积给到了$10^9$,dp数组下标会造成越界,因此我们不能用dp下标来存物品的体积,但是我们发现,物品的价值范围很小,所以我们反着想,枚举所有可能的总 阅读全文
posted @ 2020-09-05 16:14 _Kolibri 阅读(135) 评论(0) 推荐(0)
摘要:题意:给你$n$个数,首先判断它们是否全都__两两互质__.然后再判断它们是否全都互质. 题解:判断所有数互质很简单,直接枚举跑个gcd就行,关键是第一个条件我们要怎么去判断,其实我们可以对所有数进行质因数分解,然后判断它们有无共同的质因子,如果有,那么就说明一定至少有一对数它们不是互质的,这样的话 阅读全文
posted @ 2020-09-02 09:55 _Kolibri 阅读(281) 评论(0) 推荐(0)
摘要:题意:有$n$个人,给你$m$对朋友关系,朋友的朋友也是朋友,现在你想要将他们拆散放到不同的集合中,且每个集合中的人没有任何一对朋友关系,问最少需要多少集合. 题解:首先用并查集将朋友关系维护到集合中,然后贪心,其实我们所需要的集合数就是之前并查集维护的集合中的最大元素个数. 代码: int n,m 阅读全文
posted @ 2020-09-02 09:49 _Kolibri 阅读(212) 评论(0) 推荐(0)
摘要:题意:有一张$H$x$W$的图,给你$M$个目标的位置,你可以在图中放置一枚炸弹,炸弹可以摧毁所在的那一行和一列,问最多可以摧毁多少目标. 题解:首先我们记录某一行和某一列目标最多的数目,用桶标记每个目标的位置,然后记录每一行和每一列的炸弹数,再去枚举每一行和每一列,将目标数等于最大值的存起来,最后 阅读全文
posted @ 2020-08-25 13:49 _Kolibri 阅读(402) 评论(3) 推荐(2)
摘要:题意:给你一张图,"."表示能走,"#表示不能走,步行可以向四周四个方向移动一个单位,使用魔法可以移动到周围$5$X$5$的空地,问能否从起点都早终点,并求最少使用多少次魔法. 题解:明显是用BFS,但是我们要能步行就步行,尽量少使用魔法,所以我们可以用deque来存状态,将步行的状态放在前面,魔法 阅读全文
posted @ 2020-08-25 13:39 _Kolibri 阅读(435) 评论(0) 推荐(1)
摘要:题意:给你一个长度为$n$的$01$串,从高位到低位遍历,对该位取反,用得到的十进制数$mod$所有位上$1$的个数,不断循环直到为$0$,输出每次遍历时循环的次数. 题解:根据题意,我们可以直接模拟来写,但是所给数据范围会TLE,我们先记所有$1$的个数为$sum$,当取模时,我们要么取$sum+ 阅读全文
posted @ 2020-07-15 15:10 _Kolibri 阅读(136) 评论(0) 推荐(0)
摘要:题意:有$n$个数,从中选$k$个数累乘,求最大的乘积$(mod\ 10^9+7)$. 题解: 1.假如全是负数,并且选奇数个,那么从小到大选. 2.否则,考虑当前状态,假如$k$是奇数,那么我们先选一个最大的,然后再选两个最大的正数相乘或者两个负数相乘后最大,每次这样选即可. 代码: int n, 阅读全文
posted @ 2020-07-07 12:26 _Kolibri 阅读(319) 评论(0) 推荐(0)
摘要:题意:有一个空环和$n$个点,每次可以选择一个点放在空环上,并且获得周围两个点中最小的那个的权值,问能获得的最大的权值是多少? 题解:我们每次都优先放最大的进去,注意每次放的时候都要将这个点放在当前能去得到的最大权值的周围,这样的话,每个最大值我们都能取两次,所以我们只要加一个最大的权值,然后剩下的 阅读全文
posted @ 2020-07-07 12:13 _Kolibri 阅读(256) 评论(0) 推荐(0)
摘要:题意:有一张图,.表示白色,#表示黑色,每次可以将多行和多列涂成红色(也可不涂),问有多少种方案,使得剩下黑点的个数为$k$. 题解:又学到了新的算法qwq,因为这题的数据范围很小,所以可以用二进制枚举来将所以情况枚举出来. 关于二进制枚举:对于一个集合$n$,有$2n$个子集,而$[0,2n]$, 阅读全文
posted @ 2020-07-07 10:53 _Kolibri 阅读(506) 评论(0) 推荐(0)
摘要:题意:有一长度为$n$的数组,求该数组中有多少元素不能整除其它任一元素的个数. 题解:刚开始写了个分解质因数(我是傻逼),后来发现直接暴力枚举因子即可,注意某个元素出现多次时肯定不满足情况,再特判数组中存在$1$的情况即可. 代码: #include <iostream> #include <cst 阅读全文
posted @ 2020-06-15 01:26 _Kolibri 阅读(209) 评论(0) 推荐(0)
摘要:题意:有$n$个房间,在这些房间中两两连$m$次条边,问除了第一个房间,其他房间走到第一个房间的最短路径,输出这个房间所连的上一个房间,如果走不到,输出$no$. 题解:刚开始我写了一个dfs,结果竟然编译不了~~(段错误)~~,稍加分析了一下,发现样例1中成环了,然后又在纸上画了画,发现可以用bf 阅读全文
posted @ 2020-05-19 21:28 _Kolibri 阅读(254) 评论(0) 推荐(0)