摘要:
题目链接 题解 ⭐:$inf$若需多次加减不宜过大,容易溢出。 dp题呐~ 状态:$dp[i][j]$表示前$i$轮距离上次(包括当前卡牌)触发双倍已经经过$j$张卡时的最大伤害。 初始值:\(dp[i][j]=inf,dp[i][0]=0\quad (0\le i\le n,1\le j\le 9 阅读全文
摘要:
题目链接 题解 仅在easy version上增加单调队列优化即可,简单版题解。但注意为使单调队列中数据为之前卡牌,需要倒序转移(与01背包滚动数组相似)。 AC代码 #include<bits/stdc++.h> #define int long long using namespace std; 阅读全文
摘要:
题目链接 题解 dp+双指针,时间复杂度为$O(n)$。 状态:\(dp[i]\):当前最右区间结尾为$i$时是/否(\(1/0\))可行。 初始值:\(dp[0]=1,dp[i]=0\quad(1\le i\le n)\) 转移方程:将$a$数组升序排序,设$dp[i-1]$由$dp[lst]$转 阅读全文
摘要:
题目链接 题解 $O(\sqrt n)$竟然能过!暴力的胜利 利用贪心思想,我们希望最大的城堡最高,这样总塔数最小。但是高堡需要比它低的城堡做铺垫,因此总趋势应该是先单调不降后单调不升(至少我们可以将之摆放成这样)。也就是设最高值为$sum$,一排城堡应如此:\(\{n,n+1,...,sum(,s 阅读全文
摘要:
题目链接 题解 可以发现结尾只得为$00,25,50,75$,因此枚举这些数字将其放至结尾即可。若将$n$由右至左从$1$开始编号,将数字$a_i$移至末尾所需操作数为$i-1$。此外,若数对$00,25,50,75$的顺序是正确的,操作数须$-1$;若存在前缀0,需要增加前缀0个数的操作数。设$n 阅读全文