题目大意

给定 \(n\) 个度数为 \(\in [1,2]\) 之间的点,求能组成多少种简单无向图(可不连通,点与点之间有别)

分析

显然答案只与 \(n1,n2\) 有关

那么 \(dp\)?(我也不知道为什么)

设 \(f_{i,j}\) 表示当前状态的图用了 \(i\) 个点,目前其度数为 \(1\);\(j\) 同理,度数为 \(2\)

四种转移:

  • 加入两个度数为 \(1\) 的点,构成一条新链
  • 加入度数形如 \(1-2-1\) 一条链
  • 在某条链中插入两个度数为 \(2\) 的点
  • 变链成环,加入三个度数为 \(2\) 的点

我也不知道为什么这么转移

然后具体统计看代码

\(Code\)

#include<cstdio>
using namespace std;
typedef long long LL; const int N = 2005;
const LL P = 998244353;
int d[N] , n , n1 , n2;
LL ans , f[N][N]; int main()
{
freopen("graph.in" , "r" , stdin);
freopen("graph.out" , "w" , stdout);
scanf("%d" , &n);
for(register int i = 1; i <= n; i++)
scanf("%d" , &d[i]) , (d[i] == 1 ? n1++ : n2++);
f[0][0] = 1;
for(register int j = 0; j <= n2; j++)
for(register int i = 0; i <= n; i++)
{
if (!f[i][j]) continue;
if (!j) f[i + 2][j] = (f[i + 2][j] + f[i][j] * (i + 1)) % P;
f[i + 2][j + 1] = (f[i + 2][j + 1] + (i + 2) * (i + 1) / 2 % P * f[i][j] % P) % P;
f[i][j + 2] = (f[i][j + 2] + f[i][j] * i % P * (j + 1)) % P;
if (i >= 2) f[i - 2][j + 3] = (f[i - 2][j + 3] + (j + 2) * (j + 1) / 2 % P * f[i][j]) % P;
}
printf("%lld" , f[n1][n2]);
}

最新文章

  1. [LeetCode]444. Sequence Reconstruction
  2. Optimistic Concurrency VS. Pessimistic Concurrency Control
  3. js事件处理、事件对象
  4. 产品需求文档(PRD)的写作方法之笔记一
  5. Vue学习笔记-1
  6. LNMP环境搭建配置memcache
  7. 解决mysql登陆时出现“ERROR 2002 (HY000): Can&#39;t connect to local MySQL server through socket &#39;/var/run/mysql/mysql.sock&#39; (2)”
  8. Distributed R
  9. poj 2513 连接火柴 字典树+欧拉通路 好题
  10. hdu_3565_Bi-peak Number(数位DP)
  11. 圖片裁剪大頭貼功能 - ASP.NET WebForm + jQuery + imgAreaSelect
  12. Cocoapods最新安装教程
  13. 201521123074 《Java程序设计》第11周学习总结
  14. 数据提交成功后如何避免alert被window.location.reload()影响
  15. 每周分享五个 PyCharm 使用技巧(一)
  16. RabbitMQ channel 参数详解
  17. CAS统一登录认证好文汇集贴
  18. Jenkins+Jmeter+Ant自动化集成及邮件正文以html输出
  19. js-day02
  20. 洛谷P4438 道路 [HNOI/AHOI2018] 树形dp

热门文章

  1. 【Java EE】Day09 JavaScript基础、ECMAScript语法、Java对象
  2. 如何使用Java获取货币符号?
  3. pycharm 小技巧
  4. windows 、linux文件互传-FileZilla
  5. S2-052 CVE-2017-9805 远程代码执行
  6. Java学习笔记:2022年1月8日
  7. elasticsearch实现基于拼音搜索
  8. SICP:复数的直角和极坐标的表示(Python实现)
  9. 02安装一个最小化的Hadoop
  10. 学习ASP.NET Core Blazor编程系列二十三——登录(2)