摘要: 题意:长度为n的数组,数组中的每个元素的取值在1-k的范围内或者是-1,-1代表这个元素要自己选择一个1-k的数字去填写,然后要求填完的数组中不能出现连续长度大于len的情况,询问填空的方案数。 题解:初始思想是设置一个dp[][],数组第一维代表当前连续长度,第二维代表选择的数字。那最终答案就是最 阅读全文
posted @ 2018-12-18 11:54 Billyshuai 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 题意:n*m矩形,用1*2的方块填满有多少种方案数? (n,m<=11) 题解:考虑一行一行的填格子,0代表暂时不填,1代表填上。 那么对于某一行,考虑上一行能转移到它的状态,如果这一行的第j位是0,那么上一行第j位一定是1。 如果这一行的第j位是1,那么上一行第j位可以是1,也可以是0。 如果他的 阅读全文
posted @ 2018-10-25 13:17 Billyshuai 阅读(752) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个n边n点的无向连通图,两个操作,操作一改变某个边的权值,操作二查询某两个点之间的路径长度。 题解:随便删掉环上一条边搞一棵树出来,因为两点间距离是两点各自到根的距离之和减去2*lca两点到根的距离。 所以修改操作就变为维护点到根这条链上的权值,差分一下 采用树状数组维护。 查询的时候就 阅读全文
posted @ 2018-08-14 01:25 Billyshuai 阅读(378) 评论(0) 推荐(0) 编辑
摘要: 题意:长度为n的序列,有一次翻转区间的机会,问最长不减序列 题解:如果没有翻转区间的机会,有两个做法。 一是dp[i]表示以i结尾的最长序列 dp[i]=max(dp[i],dp[j]+1) (j<=i)。 二是那个抽牌替换的解法。 这道题可以翻转但是值域很小,所以考虑最长子序列和值域的关系。 选择 阅读全文
posted @ 2018-08-07 17:11 Billyshuai 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 题意 : n*m的矩阵 可以涂黑白两色 问至少A行B列为黑色的涂色方案种类数,答案对998244353取模,1<=n,m,A,B<=3000 题解: ans=sum{A,..n}sum(B,...m}*f[n-i][m-j] (i,j分别为前两个∑的迭代变量),f[a][b]表示a行b列中没有一行或 阅读全文
posted @ 2018-07-27 15:03 Billyshuai 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 链接:https://www.nowcoder.com/acm/contest/127/D来源:牛客网 题目描述 总所周知的是,小Y对于字符串之类的题目总是很得心应手的,这一天漂亮的学妹问了小Y一个题目,问两个字符串怎样进行字典序大小比较,当然啦,这种题目对于小Y来说简直是太太太太太简单的啦~~~~ 阅读全文
posted @ 2018-07-20 22:09 Billyshuai 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 题意:求每个点的子树中哪一层节点数最多,如果有节点数最多不唯一,取层数最小的。 题解:dus on tree 基本想法是对每一个节点都构建一个deep数组,然后从底向上更新过来,但是这样空间复杂度和时间复杂度都会是O(n^2)无法承受。 然后向办法共用deep数组和记录其数值的数组,那么这时候对于一 阅读全文
posted @ 2018-07-15 17:06 Billyshuai 阅读(565) 评论(0) 推荐(0) 编辑
摘要: 链接:https://www.nowcoder.com/acm/contest/131/B来源:牛客网 矩阵 M 包含 R 行 C 列,第 i 行第 j 列的值为 Mi,j。 请寻找一个子矩阵,使得这个子矩阵的和最大,且满足以下三个条件: 子矩阵的行数不能超过 X 行。 子矩阵的列数不能超过 Y 列 阅读全文
posted @ 2018-07-07 19:15 Billyshuai 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 首先有gcd(a,b)==gcd(b,a%b)这个复杂度最差也是log2的 因为大数对小数取余的时候 这个小数如果是比大数的一半大 那么取余完会比大数的一半大,如果小数比大数的一半小 那么取余完还是会比大数的一半大,所以最差也是log2的。 然后是ax+by=c有解的充要条件是c整除gcd(a,b) 阅读全文
posted @ 2018-05-21 22:16 Billyshuai 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 链接:https://www.nowcoder.com/acm/contest/109/C来源:牛客网 给定长度为n的数组a,定义一次操作为: 1. 算出长度为n的数组s,使得si= (a[1] + a[2] + ... + a[i]) mod 1,000,000,007; 2. 执行a = s; 阅读全文
posted @ 2018-05-20 16:19 Billyshuai 阅读(179) 评论(0) 推荐(0) 编辑