题目链接:Portal Vjudge

Solution

一开始拿到这一题Sb了,把空放到dp中一起考虑了,这样计数就变得很麻烦。

其实我们可以把空位拿出来,假设它是存在的,最后再放回去。

那么就可以钦定某个人放到第一个,因为这是环排列,所以最后乘以n就可以了。

设\(Dp[i][j]\)表示来了\(i\)个人,分成\(j\)个联通块的方案数。

那么新来的人有三种选择,加入一个联通块,独立成为一个联通块,合并两个联通块:

\[Dp[i + 1][j + 1] += dp[i][j] * j\\
Dp[i + 1][j - 1] += dp[i][j] * j\\
Dp[i + 1][j] += dp[i][j] * 2j
\]

最后利用隔板法:$$ ans = n\sum_{i = 1}^{G} dp[m][i] * {n - k - 1 \choose i - 1}$$

一般环排列有空的计数,可以把空位全部抽出来计数,并且在计数过程中假定空存在,最后再用隔板法插入。

如果所求排列是环排列,那就钦定一种选法然后乘上环的大小即可。

Code

#include<bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for(int i = (a), i##_end_ = (b); i <= i##_end_; ++i)
#define drep(i, a, b) for(int i = (a), i##_end_ = (b); i >= i##_end_; --i)
#define clar(a, b) memset((a), (b), sizeof(a))
#define debug(...) fprintf(stderr, __VA_ARGS__)
typedef long long LL;
typedef long double LD; const int Maxn = 4009, Mod = 1e9 + 7;
class Seatfriends {
private:
int dp[Maxn][Maxn];
int invFac[Maxn], fac[Maxn];
public:
int fpm(int base, int tims) {
int r = 1;
while (tims) {
if (tims & 1) r = r * 1ll * base % Mod;
base = base * 1ll * base % Mod;
tims >>= 1;
}
return r;
}
int C(int n, int m) {
if (m > n) return 0;
return fac[n] *1ll * invFac[m] % Mod * invFac[n - m] % Mod;
} void init(int n) {
fac[0] = 1;
rep (i, 1, n) fac[i] = 1ll * fac[i - 1] * i % Mod;
invFac[n] = fpm(fac[n], Mod - 2);
drep (i, n - 1, 0) invFac[i] = invFac[i + 1] * (i + 1ll) % Mod;
} int countseatnumb(int n, int k, int g) {
init(n + k); clar(dp, 0);
dp[1][1] = 1;
rep (i, 1, k)
rep (j, 1, g)
if (dp[i][j]) {
(dp[i + 1][j + 1] += 1ll * dp[i][j] * j % Mod) %= Mod;
(dp[i + 1][j] += 2ll * j % Mod * dp[i][j] % Mod) %= Mod;
if (j > 1) (dp[i + 1][j - 1] += 1ll * dp[i][j] * j % Mod) %= Mod;
}
LL ans = 0;
if (n == k) return (g >= 1) * dp[k - 1][1] * 1ll * n % Mod;
rep (i, 1, g) ans = (ans + 1ll * dp[k][i] * C(n - k - 1, i - 1) % Mod) % Mod;
return ans * 1ll * n % Mod;
}
};

[SRM625 Div1 Hard] Seatfriends的更多相关文章

  1. CF#345 (Div1)

    论蒟蒻如何被cf虐 以下是身败名裂后的题解菌=========== Div1 A.Watchmen 有n个点,每个点有一个坐标.求曼哈顿距离=欧几里得距离的点对数量. 只需要统计x或y一样的点对数量. ...

  2. 图论 SRM 674 Div1 VampireTree 250

    Problem Statement      You are a genealogist specializing in family trees of vampires. Vampire famil ...

  3. jq对象转为dom对象:$(".div1")[0] dom对象转为jq对象:$(dom对象)

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  4. 第一次div1做出3道题

    第一次div1做出3道题! 再接再厉! 哈利路亚!

  5. 第一次进div1了

    第一次进div1~好激动啊! 上帝依旧那么眷顾我!

  6. TopCoder 649 div1 & div2

    最近一场TC,做得是在是烂,不过最后challenge阶段用一个随机数据cha了一个明显错误的代码,最后免于暴跌rating,还涨了一点.TC题目质量还是很高的,非常锻炼思维,拓展做题的视野,老老实实 ...

  7. SRM DIV1 500pt DP

    SRM 501 DIV1 500pt SRM 502 DIV1 500pt SRM 508 DIV1 500pt SRM 509 DIV1 500pt SRM 511 DIV1 500pt SRM 5 ...

  8. codeforces #305 div1 done

    总算搞定了这一场比赛的题目,感觉收获蛮大 其中A,B,C都能通过自己的思考解决掉 D题思路好神,E题仔细想想也能想出来 以后坚持每两天或者一天做一场CF的div1的全套题目 除非有实在无法做出来的题目 ...

  9. [Codeforces Round #254 div1] C.DZY Loves Colors 【线段树】

    题目链接:CF Round #254 div1 C 题目分析 这道题目是要实现区间赋值的操作,同时还要根据区间中原先的值修改区间上的属性权值. 如果直接使用普通的线段树区间赋值的方法,当一个节点表示的 ...

随机推荐

  1. Win8系统如何关闭用户账户控制UAC

    按WIN+S,屏幕右侧出现搜索框,在搜索框中输入UAC,然后单击"更改用户账户控制设置"   然后把弹出的窗口改成"从不通知"就可以了  

  2. payload和formData有什么不同?

    最近做项目的时候,在通过post请求向服务端发送数据的时候,请求失败了.错误信息如下: 返回的400(bad request)错误,说明客户端这边发送的请求是有问题的. 和通过jquery中的ajax ...

  3. 【知识梳理1】Android触摸事件机制

    前言 随着科学技术的发展,智能手机早已成为我们当代人身边不可缺少的"伙伴"之中的一个,堪比对象女友.每天我们对着手机反复的做着点击.滑动操作,而手机则随着我们的操作给我们展示她的精 ...

  4. JavaScript基本类型与引用类型

    前面已经说过,JavaScript变量是松散类型,它可以保存任何类型的值.变量的值以及数据类型可以在脚本的生命周期内发生改变.变量包含两种不同类型的值:基本类型和引用类型.基本类型值的是简单的数据段, ...

  5. GIS+=地理信息+云计算技术——Spark集群部署

    第一步:安装软件         Spark 1.5.4:wget http://www.apache.org/dyn/closer.lua/spark/spark-1.5.2/spark-1.5.2 ...

  6. Android AR场景拍照技术实现(有关键源代码)

    ARVR技术交流群:129340649 欢迎增加. AR场景往往给别人留下的印象深刻,假设模型做的炫丽一点,效果将会更好. 那么怎样保存这一美好的情景呢?这篇文章将教你怎样实现AR场景的拍摄以及永久保 ...

  7. apt-pkg

    1 什么是apt-pkg python的apt库,可以做apt可以做的任何事情. 2 apt_pkg.parse_depends(depends, strip_multiarch=True) 这里的d ...

  8. 常用的机器学习&数据挖掘知识点总结

    Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),ML ...

  9. sql server 支持中文繁体和简体

    SET ANSI_PADDING ON  INSERT INTO 表 VALUES (N'中文')

  10. YTU 2553: 谁是赢家

    2553: 谁是赢家 时间限制: 1 Sec  内存限制: 128 MB 提交: 94  解决: 25 题目描述 某一天,hcbbt等一群弱菜去tamara巨巨家里一起玩了一个卡牌游戏.巨 巨家里有2 ...