|
题目 4180 毛二琛
2025-10-05 15:17:51
|
|
回复 @金牌教师王艳 : 可以记搜
题目 3501 [CSP 2020J]方格取数
2025-10-04 23:32:46
|
|
?
题目 4180 毛二琛
2025-10-04 21:15:50
|
|
原题地址:https://www.hackerrank.com/contests/w34/challenges/magic-cards
题目 4084 魔法卡片
2025-10-04 16:01:44
|
|
先来考虑一个排列可到达的条件是什么。
如果不是 n 排列,而是 01 序列的话,那么条件是显然的:只要对于任意 i,序列 b 的 第 i 个 1 都位于序列 a 的第 i 个 1 的右边(不一定严格),那么 a 就可以到达 b。 对于一个 n 排列 a,以及一个数 k,把 a 中大于 k 的数标为 1,剩下的数标为 0, 就能得 到一个 01 序列。如果对于任意的 k,排列 a 对应的 01 序列都能够到达排列 b 对 应的序列,那么排列 a 就可以到达排列 b。 它的必要性是显然的。至于充分性,可以观察下面这个移动策略: i 从 n 到 1 的顺 序,每次将数字 i 移到它的目标位置,令当前位置为 l,目标位置为 r,当前 (l, r] 区间的 最大数字为 a[j],那么把 a[l] 和 a[j] 交换一下即可。 容易看出这样移动一定是可行的。 那么只要做一个 01 串 DP: F[i][j]表示到第 i 位,已经用了的集合为 j 的方案数,从一个全 0 的串开始,每次转移 是枚举第 i 位放几,即将串中的某个 0 改为 1,最后到达一个全 1 的串,且保证经过的都 是合法 01 串。
题目 4178 排列
2025-10-04 15:11:28
|
|
暴力是O(3^N)。
考虑meet-in-the-middle,左边的那些3^(N/2)枚举分别是不放还是放到第一组还是放到第二组,并记录下来。 右边的3^(N/2)枚举后,再2^(N/2)看看左边符合这个值的那些,就行了。 总复杂度O(6^(N/2))。 其实调整左右大小可以使得复杂度更优。 来源:USACO 2012 OPEN GOLD subsets
题目 4179 毛一琛
2025-10-04 14:52:10
|
|
这题题意真的清楚么
题目 3719 有n种物品
2025-10-01 12:11:13
|
|
\frac{3}{2}\sum_{\alpha=0}^3\sum_{\beta=0}^3 g^{\alpha\beta}\partial_\mu\partial_\nu g_{\alpha\beta} = \frac{3}{2}\left(g^{00}\partial_\mu\partial_\nu g_{00} + g^{01}\partial_\mu\partial_\nu g_{01} + g^{02}\partial_\mu\partial_\nu g_{02} + g^{03}\partial_\mu\partial_\nu g_{03} + g^{10}\partial_\mu\partial_\nu g_{10} + \cdots + g^{33}\partial_\mu\partial_\nu g_{33}\right)
页面 19 MathJax基础语法
2025-09-29 23:55:58
|
|
简单描述
公式使用两个美元符号扩起来,对于独占单行的公式,则需要两边各有两个美元符号包裹起来。 下标使用下划线表示,如: $a_i+b_j=c_k$ 显示为: ai+bj=ck 上标使用向上的箭头(C 语言中的异或符号)表示,如: $y=ax^2+bx+c$ 显示为: y=ax2+bx+c 除此之外,还有一些常见的使用方法,如: $\frac{-b\pm\sqrt{b^2-4ac}}{2a}$ 显示为: −b±b2−4ac√2a
页面 19 MathJax基础语法
2025-09-25 20:27:40
|
|
格式问题
题目描述第10行,“我们按上述算法得到的排列顺序将它们从 0∼2(上标n-1)编号”中,“2(上标n-1)”应该为“$2^n-1$”。
题目 3289 [CSP 2019S]格雷码
2025-09-25 19:47:15
|
|
人品-=114514
页面 99 2025开训指南
2025-09-25 19:17:19
|
|
|
|
S组最温柔的一道第一题,也是唯一一个我认为 不用去网上搜相关内容就能写的了
![]()
题目 4053 [CSP 2024 S]决斗
2025-09-24 22:05:13
|
|
题目 4053 [CSP 2024 S]决斗
2025-09-24 22:03:40
|
|
不懂就问 结论猜到了不会证明该怎么办
题目 1278 [HNOI 2011] 赛车游戏
2025-09-23 20:18:04
|
|
题目 3289 [CSP 2019S]格雷码
2025-09-23 20:11:21
|
|
#转自ChatGPT 5-high
对于方格取数问题,定义状态 $dp[j][i]$ 表示走到第 $j$ 列第 $i$ 行时能获得的最大和。 ## 初始条件 $$dp[0][0] = a[0][0]$$ $$dp[0][i] = dp[0][i-1] + a[i][0], \quad 1 \leq i < n$$ ## 状态转移方程 $$dp[j][i] = \max_{0 \leq k < n} \left(dp[j-1][k] + \sum_{l=\min(i,k)}^{\max(i,k)} a[l][j]\right), \quad 1 \leq j < m, 0 \leq i < n$$ ## 最终答案 $$answer = dp[m-1][n-1]$$ 其中: - $n$ 为行数,$m$ 为列数 - $a[i][j]$ 表示第 $i$ 行第 $j$ 列的值 - $\min(i,k)$ 和 $\max(i,k)$ 分别表示 $i$ 和 $k$ 中的较小值和较大值 - 求和项表示在第 $j$ 列中从第 $k$ 行走到第 $i$ 行所经过的所有格子的值之和 |
|
转成2进制就可以了,但是手动转太麻烦了,由于我是懒狗,所以直接位运算判断一位是啥就可以了,挺好写的 |
|
去网上找点位运算之类的东西会好做点,从最高位开始,逐位确定格雷码的每一位是0还是1,然后每次判断k是否小于中间值,如果k小于中间值,这一位就是0;否则这一位就是1,并且需要把k翻转一下,(1ULL << (i-1)) - 计算中间值,(1ULL << i) - 1 - k - 翻转k值
题目 3289 [CSP 2019S]格雷码
2025-09-23 12:58:20
|
|
666,我还以为是个搜索,要不然记忆化要不然剪枝,结果你告诉我是dp?改了半天搜索就30分结果回家一问chatgpt是动规?
|