动态规划
方哲Beans
一只小蒟蒻
展开
-
Say No to Palindromes
因为要不存在长度大于等于2的回文子串,所以相邻的字符不能相同,又因为字符串只包含abc三种字符,所以不难发现,字符串只能由"abc"“acb”“bac”“bca”“cab”"cba"这六种子串组成,因此可以令f[j][i]表示前i个字符,当前匹配第j种子串,不合法的字符数,即需要的操作数,对于每次询问,枚举6种子串, ans = min(ans, f[j][r] - f[j][l - 1])即可。例如,a只能变成b或c。原创 2023-05-25 19:37:05 · 44 阅读 · 0 评论 -
Codeforces Round 871 (Div. 4)H. Don‘t Blame Me‘
选a[i]: f[i][j & a[i]] = (f[i][j & a[i]] + f[i - 1][j]) % mod;不选a[i]: f[i][j] = (f[i][j] + f[i - 1][j]) % mod;给一个数组,在其中找按位与和等于k的子序列,求子序列的个数mod 1e9 + 7。动态规划,设f[i][j]表示在前i个数里面选,按位与和为j的子序列个数。原创 2023-05-24 12:59:32 · 126 阅读 · 0 评论 -
Robot in a Hallway
创建一个数组b,b[i][j]表示从(i,j)开始一直走到底再转向下一行走回来所花费的时间,这样只要枚举从哪一个格子开始走到底就行了。为了防止往后走再返回的时间小于前面需要等待的时间,让b[i][j] = max(b[i][j + 1] + 1, max(a[i ^ 1][j], a[i][j] + (m - j) * 2 + 1))即可。给一个2 * m的数组,令行从0开始,列从1开始,从(0,1)出发,不重复地走完所有格子,每个格子要等a[i][j]秒才能走。求走完所以格子的最小时间。原创 2023-05-10 16:53:44 · 39 阅读 · 1 评论