zoukankan      html  css  js  c++  java
  • [bzoj 1025][SCOI2009]游戏(DP)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1025

    分析:首先这个问题等价于A1+A2+……Ak=n,求lcm(A1,A2,……,Ak)的种数

    考虑一个Lcm=p1^a1 * p2^a2 * …… pk^ak 是否可能出现

    WJMZBMR提出,能出现的充要条件是p1^a1+p2^a2+……+pk^ak<=n

    证明:

    先证必要性:

      ∵p1^a1 p2^a2 …… pk^ak 这k个数的最小公倍数正好是lcm 且 k<n (n以内的质数的个数肯定比n小啊)

      ∴可以把n分解成n=p1^a1 + p2^a2 …… +pk^ak + 1 + ……+1 (n-k个1),1对最小公倍数的大小lcm无影响

      ∴就存在这样的分解方案使得lcm能出现

    再证充分性:

      假设p1^a1+p2^a2+……+pk^ak>n

      看个例子:27=12+8+6+1=2*2*3+2*2*2+2*3+1

      他们的lcm=24=1^1 * 2^3 * 3^1

      这个lcm如何求出来的呢?我们看看2的指数如何定:12分解质因数有2个2,8分解质因数有3个2,6分解质因数有1个2,所以lcm中2的指数就是max{2,3,1}=3,  以3为底数的指数也是如此求法。也就是说lcm里的每个质数对应的指数是对n分解的每一项中该质数个数的最大值!!!!

      那么也就说对n的拆分里面,一定至少有一项含因子p1^a1,即对n的拆分里,一定至少有一项是p1^a1的倍数,同理也至少有一项分别是p2^a2 p3^a3 ……的  倍数,不妨设是b1*p1^a1 b2*p2^a2 ……

      那么现在p1^a1+p2^a2+……+pk^ak>n

      b1*p1^a1+b2*p2^a2+……+bk*pk^ak>n

      注意bi*pi^ai是n的拆分中的一项,所以b1*p1^a1+b2*p2^a2+……+bk*pk^ak=n

      很明显上面两个式子冲突了

      于是假设不成立,一定有p1^a1+p2^a2+……+pk^ak<=n

    综上所述,原问题等价于求满足p1^a1 + p2^a2 +…… pk^ak<=n的数列(a1,a2,...,ak)一共有多少个

    这显然就是背包问题了……GG

    这种神题只能欣赏了Orz……

  • 相关阅读:
    ios testing
    Visual Studio文件自动定位功能
    如何:为 SharePoint 2013 中的 PerformancePoint Services
    sharepoint application page
    power rename batch files
    sharepoint app development configuration
    Installing and Configuring Workflow Manager 1.0
    安装用于 SharePoint 2013 的 Reporting Services SharePoint 模式
    ios dev tech
    Applications command line
  • 原文地址:https://www.cnblogs.com/wmrv587/p/3923533.html
Copyright © 2011-2022 走看看