子集最大和
解法
- 对于60%的数据,n比较小,我们可以搜索,对于一个数而言,有两种选择,一种是选择,另一种是不选择,用这个方法搜索就可以了
- 对于100%的数据而言,\(n \leq 1000\),肯定不能搜索了,但是,题目里还有一个条件没有使用,就是\(a_{i-1}+a_{i-2} \leq a_i\), 感觉这个和斐波那契数列有关,斐波那契数列增长是非常快的,C的范围在int范围内,所以n不可能太大,自己算一下应该在45以内,找到这个性质的话,我们就知道,对于100%的数据而言,\(n \leq 45\)
- 其实,oi里面有一种题,就是这种找性质的题目,比如说CSPJ2024第三题也是这样的题,所以大家要学会找题目中的性质
- 即使找到性质,n的范围仍然不能让我们直接搜索,这个时候就要想到优化搜索的几种办法:最优性剪枝、可行性剪枝、调整搜索顺序、记忆化搜索。
- 调整搜索顺序:我们可以从后往前搜索,先用大的,再用小的,这样试错会比较快点儿
比如说1 2 5,要拼凑出来的数字是5,从小到大搜索的话就没有从大到小快 - 可行性剪枝在这个题里怎么应用呢?比如说,我们已经处理到了k,当前的和是s,当前的答案是ans,我们是不是可以看看\(sum[k-1]+s<ans\)的话,是不是也没必要了
- 最优化剪枝:目前没想到
- 记忆化搜索能用吗?搜索的定义表示的是从第n个到第k个能否拼出s,这个好像不能记忆化搜索,需要讨论一下。如果是s能否通过1-k-1拼出,这个是可以记忆化的,但是这个定义显然不是,所以不可以记忆化。
电路维修
这个是一个典型的双端队列的题,这里不再赘述
标签:剪枝,这个,记忆,题目,leq,搜索,CSPJ,模拟 From: https://www.cnblogs.com/sdfzls/p/18665735