hdu 6377 度度熊看球赛 (dp)

大意: $n$对情侣, $2n$个座位, 对于一个方案, 若$k$对情侣相邻, 则喧闹值增加$D^k$, 求喧闹值期望.

跟CF 840C一样, 设$dp[i][j]$为$i$个人, 有$j$对情侣相邻, 枚举每个人转移即可.

#include <iostream>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;
typedef long long ll;
const int N = 2e3+10, P = 998244353;
int n, d, dp[N][N], fac[N][N];

int main() {
	dp[0][0] = 1;
	REP(i,0,2000) REP(j,0,i/2) if (dp[i][j]) {
		int &r = dp[i][j];
		if (i&1) {
			dp[i+1][j] = (dp[i+1][j]+(ll)(i+1-j-2)*r)%P;
			dp[i+1][j+1] = (dp[i+1][j+1]+2ll*r)%P;
			if (j) dp[i+1][j-1] = (dp[i+1][j-1]+(ll)j*r)%P;
		}
		else {
			dp[i+1][j] = (dp[i+1][j]+(ll)(i+1-j)*r)%P;
			if (j) dp[i+1][j-1] = (dp[i+1][j-1]+(ll)j*r)%P;
		}
	}
	REP(i,1,1000) {
		fac[i][0] = 1;
		REP(j,1,1000) fac[i][j] = (ll)fac[i][j-1]*i%P;
	}
	while (~scanf("%d%d", &n, &d)) {
		int ans = 0;
		REP(i,0,n) {
			ans = (ans+(ll)dp[2*n][i]*fac[d][i])%P;
		}
		printf("%d\n", ans);
	}
}

原文地址:https://www.cnblogs.com/uid001/p/11140142.html

时间: 2024-10-13 20:04:46

hdu 6377 度度熊看球赛 (dp)的相关文章

HDU 6377 度度熊看球赛 (计数DP)

度度熊看球赛 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 293    Accepted Submission(s): 130 Problem Description 世界杯正如火如荼地开展!度度熊来到了一家酒吧. 有 N 对情侣相约一起看世界杯,荧幕前正好有 2×N 个横排的位置. 所有人都会随机坐在某个位置上. 当然,如果某一对情

hdu 6377 : 度度熊看球赛

题目链接 题解: 将原问题转换为 对于全部 (2n)! 种情况,每种情况对ans的贡献为 D^k,其中k表示该情况下有k对情侣座位相邻. 预处理好共有 i (1<=i<=N)对情侣时,出现 j (0<=j<=i) 对情侣坐在一起时情况数,用dp[i][j]记录 初始条件为dp[1][1]=2 当总情侣对数由 i 向 i+1 转移时,j 有四种变化的可能 j-1 → j : 新来的情侣"一起"插入到不打断先前情侣的"相邻"座位处 dp[i+1]

2018 “百度之星”程序设计大赛 - 初赛(A)1004 / hdu6377 度度熊看球赛 dp递推

度度熊看球赛 Problem Description 世界杯正如火如荼地开展!度度熊来到了一家酒吧. 有 N 对情侣相约一起看世界杯,荧幕前正好有 2×N 个横排的位置. 所有人都会随机坐在某个位置上. 当然,如果某一对情侣正好挨着坐,他们就会有说不完的话,影响世界杯的观看. 一般地,对于一个就座方案,如果正好有 K 对情侣正好是挨着坐的,就会产生 DK 的喧闹值. 度度熊想知道随机就座方案的期望喧闹值. 为了避免输出实数,设答案为 ans,请输出 ans×(2N)! mod P 的值.其中 P

hdu 6118 度度熊的交易计划(可行费用流)

题目链接:hdu 6118 度度熊的交易计划 题意: 中文,说的很清楚了. 题解: 对着输入建一些图,跑一下可行费用流就行了,即当费用为正的时候就不跑了,这样就先满足了费用最小. 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=(a);i<=(b);++i) 3 using namespace std; 4 5 namespace MCMF 6 { 7 const int N=1e5+7,inf=1e9+7; 8 int u[

hdu 6082 度度熊与邪恶大魔王(2017&quot;百度之星&quot;程序设计大赛 - 资格赛 )

度度熊与邪恶大魔王 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 251    Accepted Submission(s): 125 Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来.邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力.度度熊一共拥有m种攻击方式,第i

【判连通】HDU 6113 度度熊的01世界

http://acm.hdu.edu.cn/showproblem.php?pid=6113 [题意] 度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成. 现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者两者均不是. 图像0的定义:存在1字符且1字符只能是由一个连通块组成,存在且仅存在一个由0字符组成的连通块完全被1所包围. 图像1的定义:存在1字符且1字符只能是由一个连通块组成,不存在任何0字符组成的连通块被1所完全包围. 连通的含义是,只要连续两个方

HDU 6113 度度熊的01世界 【DFS】(2017&quot;百度之星&quot;程序设计大赛 - 初赛(A))

度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1117    Accepted Submission(s): 400 Problem Description 度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成. 现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者两者均不是. 图像0

HDU - 6082 度度熊与邪恶大魔王(背包变式)

度度熊与邪恶大魔王 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式,第i种攻击方式,需要消耗k[i]的晶石,造成p[i]点伤害. 当然,如果度度熊使用第i个技能打在第j个怪兽上面的话,会使得第j个怪兽的生命值减少p[i]-b[j],当然如果伤害小于防御,那么攻击就不会奏效. 如果怪兽的生命值降为0或以下,那么怪兽就会被消灭. 当然每个技能都可以使用无限次. 请问度度熊最少携带多少晶石

HDU 6113 度度熊的01世界

度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1276    Accepted Submission(s): 466 Problem Description 度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成. 现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者两者均不是. 图像0