数学甜点002 |轮换式、对称式中的变形——从一道“饱受争议”的伊朗数学奥林匹克谈起(1)

轮换式和对称式

说到恒等式变形,还不得不从最基本的轮换式和对称式开始说起。

  1. 轮换式
    如果一个多项式中的变量字母按照任何次序轮换后,原多项式不变,那么称该多项式是轮换多项式,简称轮换式。举个例子吧:
    f ( a , b , c ) = a b + b c + c a f(a,b,c)=ab+bc+ca f(a,b,c)=ab+bc+ca
    如果要说明这个式子是轮换式,那么根据定义,这等价于证明:
    f ( a , b , c ) = f ( b , c , a ) = f ( c , a , b ) f(a,b,c)=f(b,c,a)=f(c,a,b) f(a,b,c)=f(b,c,a)=f(c,a,b)
    而这是显然成立的。
    类似的轮换式还有:
    f 1 ( a , b , c ) = a 2 b 2 c 2 f 2 ( a , b , c ) = a 2 b + b 2 c + c 2 a f 3 ( a , b , c ) = a 100 + b 100 + c 100 … f_1(a,b,c)=a^2b^2c^2 \\ f_2(a,b,c)=a^2b+b^2c+c^2a \\ f_3(a,b,c)=a^{100}+b^{100}+c^{100} \\ \dots f1(a,b,c)=a2b2c2f2(a,b,c)=a2b+b2c+c2af3(a,b,c)=a100+b100+c100
    为了方便起见,我们将轮换的和式和积式记为 ∑ c y c f ( x ) , ∏ c y c g ( x ) \sum\limits _{cyc} f(x),\prod\limits _{cyc} g(x) cycf(x),cycg(x),比如:
    f 1 ( a , b , c ) = ∏ f 2 ( a , b , c ) = ∑ c y c a 2 b , f 3 ( a , b , c ) = ∑ c y c a 100 f_1 (a,b,c)= \prod \\ f_2 (a,b,c)= \sum\limits _{cyc} a^2b, \\ f_3 (a,b,c)= \sum\limits _{cyc}a^{100} f1(a,b,c)=f2(a,b,c)=cyca2b,f3(a,b,c)=cyca100

  2. 对称式
    在一个含有若干个元的多项式中,如果任意交换两个元的位置,多项式不变,这样的多项式叫做对称多项式。还是先举个例子:
    f ( a , b , c ) = a 2 b 2 + b 2 c 2 + c 2 a 2 f(a,b,c)=a^2b^2+b^2c^2+c^2a^2 f(a,b,c)=a2b2+b2c2+c2a2
    不难发现, f ( a , b , c ) = f ( b , a , c ) = f ( a , c , b ) = f ( c , b , a ) = a 2 b 2 + b 2 c 2 + c 2 a 2 f(a,b,c)=f(b,a,c)=f(a,c,b)=f(c,b,a)=a^2b^2+b^2c^2+c^2a^2 f(a,b,c)=f(b,a,c)=f(a,c,b)=f(c,b,a)=a2b2+b2c2+c2a2,所以这个多项式是对称的。
    为了方便起见,我们将轮换的和式和积式记为 ∑ s y m f ( x ) , ∏ s y m g ( x ) . \sum\limits _{sym} f(x),\prod\limits _{sym} g(x). symf(x),symg(x).
    通过这种变换,我们可以将 f ( a , b , c ) → f ( b , a , c ) → f ( b , c , a ) f(a,b,c) \rightarrow f(b,a,c) \rightarrow f(b,c,a) f(a,b,c)f(b,a,c)f(b,c,a),而这正是一次“轮换”变换。
    所以,对称式一定是轮换式,但是轮换式不一定是对称式。我们把对称式又称作轮换对称式。

  3. 轮换式的运算技巧
    ∑ c y c f ( a ) + ∑ c y c g ( a ) = ∑ c y c [ f ( a ) + g ( a ) ] \sum \limits _{cyc} f(a) + \sum \limits _{cyc} g(a) = \sum \limits _{cyc} [f(a)+g(a)] cycf(a)+cycg(a)=cyc[f(a)+g(a)](和的运算)
    ( ∑ c y c f ( a ) ) ⋅ ( ∑ c y c g ( a ) ) = ∑ c y c [ ( ∑ c y c g ( a ) ) ⋅ f ( a ) ] (\sum \limits _{cyc} f(a))\cdot (\sum \limits _{cyc}g(a))=\sum \limits _{cyc} [(\sum \limits _{cyc}g(a))\cdot f(a)] (cycf(a))(cycg(a))=cyc[(cycg(a))f(a)](积的运算)

有了这些技巧,在展开轮换式的过程中就不会那么“头疼了”。


结束语(凑字数专用) :

欢迎大家关注我的博客!

我的洛谷账号:这是我

我的洛谷团队:这是我的团队

欢迎大家关注我,并加入我的团队哦^ _ ^

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你说得对,动态规划的空间复杂度是O(kn),对于k和n较大的情况可能会超出内存限制。此时我们可以使用数学方法来解决这个问题。 首先,我们可以将每个甜点的价值转换为二进制形,例如第i个甜点的价值为2^i,对应的二进制数为1后面跟着i个0,例如第5个甜点的价值为2^5=32,对应的二进制数为100000。 然后,我们可以将问题转化为求二进制数的和不超过n的所有组合数。设f(i,j)表示考虑前i个二进制位(即前i个甜点),二进制数的和为j的组合数。则最终答案为sum(f(k,j)),其0≤j≤n。 对于f(i,j),有两种情况: 1. 第i个二进制位(即第i个甜点)不选,则f(i,j)=f(i-1,j); 2. 第i个二进制位选,则f(i,j)=f(i-1,j-2^i)。 因此可以得到转移方程: f(i,j) = f(i-1,j) + f(i-1,j-2^i) (j≥2^i) f(i,j) = f(i-1,j) (j<2^i) 初始状态为f(0,0)=1,即空集的组合数为1。 可以使用滚动数组优化空间复杂度,降低为O(n)。具体来说,令g(j)表示考虑前i个二进制位(即前i个甜点),二进制数的和为j的组合数,则g(j)的转移方程为: g(j) = g(j) + g(j-2^i) (j≥2^i) g(j) = g(j) (j<2^i) 因为g(j-2^i)的值只依赖于g(j)和g(j-2^i),因此可以使用滚动数组来优化空间复杂度。 最终的时间复杂度为O(nlogk),空间复杂度为O(n)。下面是Python代码: ```python t = int(input()) for _ in range(t): n, k = map(int, input().split()) g = [0] * (n+1) g[0] = 1 for i in range(1, k+1): for j in range(n, -1, -1): if j >= 2**i: g[j] += g[j-2**i] print(g[n]) ``` 希望这个解法对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值