Loading [MathJax]/jax/output/CommonHTML/jax.js

[BOJ 12797] 연금술

2022. 8. 20. 23:35PS/백준

굉장히 오랜만에 올리는 포스팅~ 방학동안 버클리에 가 있어서 백준을 못한게 크다 ㅜㅜ. 본론으로 들어가자.

문제는 m개의 재료 중에서 n개를 선택해서 그 값들의 곱을 모두 더하는 것이다!! 간단히 주어진 예제로 생각해보면 값이 각각 x,y,z라고 할 때

x3+y3+z3+x2(y+z)+y2(z+x)+z2(x+y)+xyx

를 구하는 것이다. 우리가 생각할 수 있는 것은 이 식을 어떻게 좀 간단하게 할 수 있냐는 것이다. 놀랍게도 위의 식은 다음과 같이 간단하게 표현된다!

x5(xy)(xz)+y5(yx)(yz)+z5(zx)(zy)

값이 서로 다른 m개의 재료 중에서 n개를 선택해서 값을 모두 구하는 함수를 f(n,m)이라 정의하자. 

Claim.  f(n,m)=mi=1an+m1imj=1, ji(aiaj)

우리는 f(n,m)를 더 작은 꼴로 나눠서 생각해 볼 수 있다. m번째 재료를 반드시 사용한다고 하자. 그럼 amf(n1,m)이 되겠다. 반대로 m번째 재료는 사용하지 않는다고 하면 f(n,m1)이 된다. 따라서 다음을 얻는다.

f(n,m)=amf(n1,m)+f(n,m1)

이때 우리가 f(n1,m), f(n,m1)의 값이 Claim의 값과 같다고 가정하자. 그럼

f(n,m)=ammi=1an+m2imj=1, ji(aiaj)+m1i=1an+m2im1j=1, ji(aiaj)

각 항에 있는 it<m로 고정해서 생각해보자. 그럼

aman+m2tmj=1, jt(ataj)+an+m2tm1j=1, jt(ataj)=an+m2tam+(atam)mj=1, jt(ataj)=an+m1tmj=1, jt(ataj)

반면 f(n,0)=0, f(0,n)=1임이 자명하므로 귀납법에 의해 증명 되었다.

'PS > 백준' 카테고리의 다른 글