- 博客(7)
- 收藏
- 关注
原创 ACM寒假第六讲
其中x是当前结点,y是x的一个子结点,k表示结点y上保留的边数,0<j<=min(siz[x],q),0=<k<=min(siz[y],j-1)。因为要把x和y之间的边算上,所以是j-1-k。给出状态转移方程:dp[x][j]=max(dp[x][j] , dp[x][j-1-k]+dp[y][k]+edge[i].w)就是把所有的路反向,再走一次。我们用dp[i][j]表示顶点i的子树上保留j条边的最大权值和是多少。T2:如果当前节点放置士兵,只要将dp[x][1]加上它的子节点选不选的。
2025-02-19 16:58:29
294
原创 寒假第六讲
可以考虑纳入LCS——那么就可以转变成nnlogn求用来记录新的位置的map数组中的**LIS**。用dp[i][1]表示第i个人说谎, dp[i][0]表示第i个人没说谎。dp[1][1]必存在,当第一个数为0时dp[1][0]存在。为了时空复杂度都达到最佳,我这里用了倒序枚举容量。那么答案肯定就是最大值了。求一次max就可以了。的方法(这样可以只用一维数组dp,否则要二维)。dp[i]表示以i为结尾的最大连续和的值。这里采药的总时间就是背包的容量。,而每株药草的时间就是重量。遍历dp找到最大的一个。
2025-02-16 16:01:40
198
原创 集训第四个专题
这道题目是一个两路搜索,对于每种饲料,都可以选择加或者不加。每访问后需要对此时的状态进行判定,是否满足条件,满足条件则返回并对比答案来确定是否要更新答案,不满足条件继续向下搜索。给未搜索过的元素赋ans值,值为v[ i ]的ans值+1,因为我们一次只推进一格,经过dfs搜索后,我们的方阵就变成了外围是3,中间是1,内层是0。从dfs(0,0)开始泛洪去找所有外围的0,将其染色成3。在原有方阵的外围加上一圈0:0到n+1行,0到n+1列。用方向数组搜索队列元素v[ i ]的上、下、左、右四个方向,
2025-02-12 17:47:11
218
原创 集训第四个专题
所以我们可以先用线性筛把这个范围内的质因数求出来,然后再用这些质因数标记[L,R]范围内的合数即可。T1:lcm与数的顺序没有关系,所以我们记录每个数出现的次数,然后类似筛法一样去找每一个数的因子有多少个就好了。对于素数prime[i],要得到第一个大于等于L的倍数,令j=(L-1)/prime[i]+1的技巧挺不错的。已知最大公约数为x0,最小公倍数为y0.那么对于任意的满足条件的 P,Q 有 P*Q = x0 * y0。(基于公式 a*b = gcd(a,b)*lcm(a,b))
2025-02-10 12:41:50
216
原创 集训第三次课
显然,初始范围 a[i] ~ a[i+1<<j-1] 被等分后,第一部分范围为 a[i] ~a[i+1<<(j-1)-1],第二部分范围为 a[i+1<<(j-1)] ~ a[i+1<<j-1],分别对应于f[i][j-1]和f[i+1<<(j-1)][j-1]。这样就能理解 1<<(j-1) 及 1<<j-1 代表不同的运算,即 1<<(j-1) 等价于 2^(j-1), 1<<j-1 等价于 2^j-1。否则,压进栈里就好了。在枚举每个奶牛的时候,我们可以比较当前奶牛的升高与栈顶的奶牛的身高。
2025-02-06 12:08:03
453
原创 集训第一个专题
EasyT1:思路:这一题比较基础,唯一要处理的就是o的数量,这与我们输入的数字n有关,使用append函数可以简洁快速实现,最后输出龙字符串即可。T2:思路:这一题没想到用C++怎么写,是用C语言写的捏。我用字符串读入数据,调用函数,首先将字符串中的字母转换为小写,再与“yes”逐一进行比较,根据比较结果来输出“YES”或者“NO”。T3:Medium。
2025-01-23 16:10:13
290
空空如也
为什么我运行后不论输入怎样的两个数据都是找您0元呀?(刚入门)
2024-07-31
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅