zoukankan      html  css  js  c++  java
  • Codeforces 660E Different Subsets For All Tuples【组合数学】

    看了官方题解+q神的讲解才懂。。。
    智商问题。。
    讲道理。。数学真的比脱单难啊。。。


    题目链接:

    http://codeforces.com/problemset/problem/660/E

    题意:

    给定数字范围,问由这些数字组成的长度为n的串的子序列有多少种?

    分析:

    方法一:

    枚举长度k,计算以其为子序列的原串种数。
    k=0时,ans=mn
    k1时,设序列元素为x1,x2,x3...xk,为了避免重复,我们假设当前位置是第一次出现xi,即要求x1之前的元素不会出现x1x1x2之间的元素不会出现x2,依次类推,每个间隔中的每个元素都为m1种。
    最后枚举xk结束的位置,即xk后面的元素个数j,这些元素每个有m种可能。由于我们枚举了xk的位置,那么前k1个元素的位置就有(nj1k1)种。
    这样对于每个k,我们可以得到公式:

    j=0nkmkmj(m1)njk(nj1k1)

    s=nj,则有
    k=1ns=knmkmns(m1)sk(s1k1)

    =s=1nk=1smkmns(m1)sk(s1k1)

    后一项求和利用二项式定理进行化简,最终得到

    =s=1nmns+1(2m1)s1

    代码:

    #include <iostream>
    using namespace std;
    const int mod = 1e9 + 7;
    int quick_pow(int a, int b)
    {
        int ans = 1;
        for(;b;b >>= 1, a = a * 1ll * a % mod){
            if(b & 1) ans = ans * 1ll * a % mod;
        }
        return ans;
    }
    int main()
    {
        int n, m;cin>>n>>m;
        int ans = quick_pow(m, n);
        for(int s = 1; s <= n; s ++)
            ans = (ans + quick_pow(m, n - s+ 1) * 1ll * quick_pow( 2 * m - 1, s - 1)) % mod;
        cout<<ans<<endl;
        return 0;
    }
    

    然后可以发现这个就是个等比数列。
    最后不要忘记加上空串的mn

    #include <iostream>
    using namespace std;
    const int mod = 1e9 + 7;
    int quick_pow(int a, int b)
    {
        int ans = 1;
        for(;b;b >>= 1, a = a * 1ll * a % mod){
            if(b & 1) ans = ans * 1ll * a % mod;
        }
        return ans;
    }
    int main()
    {
        int n, m;cin>>n>>m;
        int ans ;
        if(m == 1) ans = n + 1;
        else
        ans = (quick_pow(m, n) + m * 1ll * (quick_pow(2 * m - 1, n) - quick_pow(m, n)) % mod * quick_pow(m - 1, mod - 2) % mod) % mod;
        cout<<ans<<endl;
        return 0;
    }

    方法二:

    还有一种卿学姐的dp方法。。

  • 相关阅读:
    TabControl添加关闭按钮
    Windows & RabbitMQ:集群(clustering) & 高可用(HA)
    Windows & RabbitMQ:Shovel
    15项最佳电子产品影响人类未来
    收藏很久的开关电源书籍
    我也不想这样(转载)
    vbs 脚本轻松搞定JDK的环境变量配置
    开关电源基本知识
    浅谈软件开发定律系列之帕金森定律(Parkinson’s Law)
    堕落的时候看看——清华大学老师的一席话
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758665.html
Copyright © 2011-2022 走看看