url: https://www.luogu.com.cn/problem/CF149Dtag:搜索,记忆化搜索,区间DP思路:使用 f[l][r][i][j] 表示区间l和r之间l为i色,r为j色时的染色方案数。有两种情况,当 l 和 r 配对时,可以由 l + 1 到 r - 1更新过来。如果不配对,由 l 到 第一个配对的括号这段区间和由那个…
url: https://www.luogu.com.cn/problem/P1074tag:NOIP2009 提高组,搜索,剪枝,位运算,NOIP提高组,2009思路:核心变量解析a[10][10]:存储数独棋盘,ai表示第i行第j格的数字(0表示空格)r[10]:行约束,r[i]的二进制第k位表示第i行能否填数字k+1(1表示可用)c[10]:…
url: https://www.luogu.com.cn/problem/P2476tag:SCOI2008,动态规划,搜索,记忆化搜索思路:开一个6维的数组来表示状态(因为每种情况有多种,所以不能用压位bit),分别表示足够涂1, 2, 3, 4, 5块木头的颜色有几种,最后一维表示上一种颜色的种类。然后用记忆化搜索来做。参考: https:/…
url: https://www.luogu.com.cn/problem/P1120tag: 枚举,搜索,剪枝,dfs思路:先从大到小排序,并计算全部木棍长度的和。之后从最长的木棍长开始一直到和的一半枚举,作为原来木棍的长度。然后拿到这个原来的长度之后dfs一下看在有限段的情况下能不能拼凑出全部木棍,可以就输出。最后枚举完全部可能结果后都没答案,…
url: https://www.luogu.com.cn/problem/P2195tag:树的直径,树形DP,dfs,搜索,并查集,图论思路:先用树形DP求出每棵树的直径,并用并查集维护联通情况。用数组c来维护树的直径。对于询问1,直接输出直径,对于询问2,如果不在一个集合中,直径可能是原来两棵树的直径和 + 1,和原来两棵树的直径取一个最大值…
url: https://www.luogu.com.cn/problem/P1731tag:NOI1999,dfs,剪枝,搜索思路:使用dfs和剪枝。dfs有四个参数,分别表示第几层,剩余体积,当前的面积,剩余层数。剪枝是有两个,第一个,如果当前的表面积加上之后最小的面积大于当前的面积,就return,第二个,之后最大的体积小于剩余的体积就ret…
url: https://www.luogu.com.cn/problem/P5194tag:USACO05DEC,dfs,剪枝,搜索思路:先按照从大到小排序,然后计算前缀和。之后每次dfs,先判断上一个累加的结果有没有超过w,如果有就return,否则就更新res,然后判断是不是所有点都判断完了,如果是,则return。之后计算一下剩余的值之和,…