随笔分类 - ACM
大二到大三不堪回首的记忆....
摘要:原题链接 考察:01背包dp 错误思路: 定义二维结构体结构体DP[i][j],代表前i个人选j个的值.DP[i][j].cost代表最小花费,DP[i][j].sum代表最大和.由第i个人选不选划分集合. 此思路错在这里的最优子结构不一定推得到最优解. 比如数据: 5 3 1 1 2 3 4 4
阅读全文
摘要:原题链接 考察:线性dp 思路: 很容易看出状态转移方程,坑到本蒟蒻的是计算时间,总之请记下来.... 这里的f[n]是秒数. 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 const int N = 2010
阅读全文
摘要:原题链接 考察:线性dp 思路: 乍一看我还以为是背包dp,实际不是,f[i][j]表示第i秒,j位置能得到的最大数.f[i][j] = max(f[i-1][j],f[i-1][j-1],f[i-1][j+1])+w[i][j].每个位置能获得的馅饼数要用另一个数组存,不能用f数组. 关于如何初始
阅读全文
摘要:原题链接 考察:状压dp 错误思路: 贪心思想,每个作业用ed-cost = st排序,输出路径就是排序后的路径. 错误数据12 a 6 14 b 10 7 很明显可以发现如果数据中出现了ed-cost <0就会错误,按贪心思路是先选a,但是最优解是先选b.很明显先做完能及时做完的可以减少减去的分数
阅读全文
摘要:原题链接 考察:线性dp LIS模型 思路: 对于每一个砖块,存储6个不同的情况.将所有砖块按a,b排序,然后按LIS的模板做即可,不用担心a很小,b很大的情况.a很小注定了放在它前面的只能是a更小的. 上面是LIS的思路,本蒟蒻是三重循环未排序,因为未排序所以二重循环会出现小砖块没更新的情况,所以
阅读全文
摘要:原题链接 考察:思维 or STL 思路一: map记录出现次数.(说是这么说,但我看此题的第一反应是离散化) 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <unordered_map> 5 us
阅读全文
摘要:原题链接 考察:线性dp 错误思路: f[i][j]表示前i个字符形成j段的和.此时分为两种情况: 不选a[i],f[i][j] = f[i-1][j] 选a[i]->a[i]为独立的一段,f[i][j] = f[i-1][j-1]->a[i]不为独立的一段,此时的条件是a[i-1]也在第i段中,状
阅读全文
摘要:原题链接 考察:线性dp 思路: f[i]定义为以i结尾的连续子序列的最大值,划分集合分为a[i]做起点,或者从前面的最大值连续到a[i],状态转移方程是f[i] = max(f[i-1]+a[i],a[i]). 本题最难的点在找起点和终点(对本蒟蒻而言)....下面的测试数据可以测出代码是不是"短
阅读全文
摘要:原题链接 考察:dfs 思路: 和前面的互为互质数简直一模一样,就是把条件换成无边即可. 本题最大的坑点在输出格式上,请注意名词单复数 实测本题字母没有乱序给出. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #in
阅读全文
摘要:原题链接 考察:dfs+剪枝 思路: 很容易想到枚举每一个数,时间复杂度240需要剪枝: 搜索顺序剪枝:从小到大枚举 最优性剪枝:如果now&后面所有数>=ans,return &操作只会让数字>=原数.这里不能只与k个数,存在&大数变得更小的情况. 排除冗余:组合性枚举 本题的关键剪枝:配合剪枝2
阅读全文
摘要:原题链接 思路: 很显然是枚举对角线的点,关键在于枚举出对角线端点后怎么求另外两个点. 大佬有详细的证明,我就不画了...GO 要注意的是如果是正方形,一个正方形的对角线会枚举两次,因此答案要>>1.坐标右移并*2是避免小数和负数. 1 #include <iostream> 2 #include
阅读全文
摘要:原题链接 考察:dfs + 剪枝 思路: 搜索顺序是枚举每一个有颜色的格子左右移动的操作,时间复杂度是O(352*5).需要剪枝: 搜索顺序剪枝,这个应该没有 最优性剪枝.因为我们需要的是字典序最小的序列,也就是列坐标越小越好.可以先枚举列再枚举行,这样如果返回1就一定是最小的. 还有一个最优性剪枝
阅读全文
摘要:原题链接 考察:dfs+剪枝 思路: 从最后一列开始dfs,用bool 数组记录哪些数字被使用了即可.接下来思考如何剪枝: 搜索顺序剪枝: 从大到小枚举,大数字在低位可能性较大. 冗余处理:这里是排列型枚举. 可行性剪枝:比较关键,需要两个剪枝:高位无进位. 从第1列~第n列检查是否符合实际. 最优
阅读全文
摘要:原题链接 考察:dfs 不看算法标签完全看不出是dfs系列 思路: 枚举每一个点选与不选的集合.依次考虑几个剪枝: 搜索顺序剪枝,可能要按点权值和排序?,这样写挺麻烦的= = 最优性剪枝,这里本蒟蒻不知道怎么剪,可能存在选d较小,选c较大,但是选d a是ans的情况. 可行性剪枝,如果算出来加入这个
阅读全文
摘要:原题链接 考察:dfs+剪枝 思路: 很像小猫爬山的分组问题,但这里只考虑一组.涉及剪枝: 排除冗余:组合型枚举 最优剪枝: 如果前面所有物品和+当前w都<ans return 搜索顺序剪枝:很明显从大到小搜索. 注意这道题最优性剪枝不能是当前w<ans return. 因为可能n个小的拼凑出更大的
阅读全文
摘要:原题链接 考察:dfs+剪枝 错误思路: 用bfs解此题,会WA,因为我们要时间为T时刚刚好到达,bfs是最短时间.这道题需要我们在D周围绕圈子 思路: 直接暴力TLE了.所以需要一些剪枝. 当时间==T时回溯 这个剪枝比较关键,奇偶剪枝,如果S坐标之和的奇偶与D奇偶相同,说明我们到达D需要偶数步,
阅读全文
摘要:原题链接 考察:dfs+剪枝 思路: 首先明确暴力的思路,我们枚举每一层的r与h,求出所有满足V=N的表面积(dfs本质是暴力,我们所要做的就是剪枝).接下来考虑一些剪枝: 搜索顺序的剪枝.当我们当前枚举的体积很大时,剩下能找的r、h体积就必须尽量小,这样可以优化搜索顺序. 最优性剪枝:当s>=an
阅读全文
摘要:原题链接 考察:dfs+剪枝 思路: 写dfs先定搜索顺序,很明显我们需要枚举和,一共64个木棒,如果暴力枚举是264,必然TLE,因此在枚举和时就需要优化.可以发现如果这些木棒能拼成等长的大木棍,那么所有木棒的和一定是大木棍的倍数.由此我们只需要枚举sum的约数.定下搜索顺序后,就是将木棒分成等长
阅读全文
摘要:原题链接 考察:dfs+剪枝 错误思路: 一开始是想按行搜或者九宫格搜.但是只能想到每九个格子搜一次看有哪些数字,再dfs 没想到位运算优化. 正确思路: 预处理每行、每列、每个九宫格有哪些数字.用8位二进制数表示哪些数字被使用了(本每次找九格用位运算优化到O(1)).每次搜索找到分支最少的格子搜(
阅读全文
摘要:原题链接 考察:玄学dfs 思路1: 枚举组,判定当前数能否放进当前所有组.if 能, 加入到组中 else 新创立一个组.关键在于判定组内元素与当前数是否互质,这里用乘积代表组内的元素,如果与乘积不会互质,那么与组内所有元素一定不互质.(但是感觉会爆long long,10个数字,1040,但是实
阅读全文

浙公网安备 33010602011771号