题目链接:

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

题意:

\(m\)种颜色的球,球的数量不限。

\(l_i\) 个球。

\(1.\)要求每根绳上相邻彩球颜色不同。

\(2.\)相邻的绳子上挂的彩球种类不能相同。

题解:

\(i\)个无编号的盒子里放,每个盒子放一个,相邻盒子小球不一样,

\(a[i−1][j−1]\)表示\(i−1\)个盒子放\(j−1\)种小球,变成 \(i\) 盒子 \(j\)小球,就是新添加一个小球放进一个新的盒子里。

\(a[i−1][j]\)表示\(i−1\)个盒子\(j\)种小球,新添加一个盒子时可以放除了相邻盒子中的小球外任意小球,即 \((j−1)\) 个。

\(a[i][j]=a[i−1][j−1]+a[i−1][j]∗(j−1)\)。显然这就是第二类斯特林数。

\(j\) 种小球的合法方案数。

\(dp[i][j] = \sum\limits_{i = 1}^{m}\sum\limits_{j = 1 }^{l[i]} [dp[i-1][j]*(绳子i上放j 种小球的合法方案数)-(绳子i与绳子i-1用同样小球的方案数)(i > 1)(j <= l[i-1])]\)。

所以,

\(k\) 为可以选择的颜色数量)。

\(dp[i-1][j]*a[i][j]*A_j^j\)。

最后把该预处理的都预处理一下就可以了。

\(dp\) 那个数组好难开。。。最后\(resize\)一下过了....没有\(c++11\)我可能啥都写不出来....

代码:

#include<bits/stdc++.h>

using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-9;
const int maxn = 1001000;

int l[maxn],a[5201][5201],fac[5201],rfac[5201];
//int dp[5201][5201];
std::vector<int> dp[maxn];

int main(int argc, char const *argv[]) {
  int n,m,p;
  std::cin >> n >> m >> p;
  int sz = 0 ;
  for(int i=1;i<=n;i++) {
    std::cin >> l[i];
    //sz = max(l[i],sz);
    dp[i].resize(l[i]+1);
  }
  //  vector<vector<int>> dp(sz + 1, vector<int>(sz + 1, 0));
  fac[0] = 1;
  rfac[0] = 1;
  for(int i=1;i<=5010;i++) {
    fac[i] = 1LL * fac[i-1] * i % p;
    rfac[i] = 1LL * rfac[i-1] * (m - i + 1) % p ;
  }
  a[0][0] = 1;
  for(int i=1;i<=5010;i++) {
    for(int j=1;j<=i;j++) {
      a[i][j] = (a[i-1][j-1] + 1LL * a[i-1][j] * (j-1) % p) % p;
    }
  }
  int sum = 1;
  int ans = 0;
  for(int i=1;i<=n;i++) {
    for(int j=1;j<=l[i];j++) {
      dp[i][j] = 1LL * sum * rfac[j] % p * a[l[i]][j] % p;
      if(i > 1 && j <= l[i-1]) {
        dp[i][j] = (dp[i][j] - 1LL * dp[i-1][j] * a[l[i]][j] % p * fac[j] % p + p) % p;
      }
      ans = (ans + dp[i][j]) % p;
    }
    sum = ans;
    ans = 0;
  }
  std::cout << sum << '\n';
  return 0;
}

相关文章:

  • 2022-12-23
  • 2021-12-07
  • 2021-10-06
  • 2022-12-23
  • 2021-06-04
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-09-29
  • 2021-11-14
  • 2022-12-23
  • 2021-07-13
  • 2021-07-18
相关资源
相似解决方案