我們可以記f[i]表示i個點的連通圖的個數

則我們可以考慮將i個點不必聯通的圖個數(記為g)減去i個點的不連通圖個數

那麼f[i]=g[i]-c(j-1,i-1)f[j]gi-j

枚舉一個j,強制將j定為包含點1的聯通塊的點的個數

然後這兩個部分不能連邊

則現在的不連通圖個數為(使j個點聯通的方案
(i-j)個點不必聯通的方案
在2i這些點中,選出j-1個點作為i聯通塊內部的點的方案個數) 並且我們這i個點不能全聯通,所以j只能枚舉到i-1 再記f1[i]表示i個點最大聯通塊點數<=k的方案數 枚舉一個j表示現在包含1的聯通塊大小 那麼j對答案的貢獻為(使j個點聯通的方案*(i-j)個點中最大聯通塊點數<=k的方案數*在2i這些點中,選出j-1個點作為i聯通塊內部的點的方案個數)

由於我們最大聯通塊個數不能超過k,所以j不能超過min(i,k)

那麼f1[i]=c(j-1,i-1)*f[j]*f1i-j

也是這兩部分不能連邊

最後,我們答案說最大聯通塊大小==k,所以可以拆成<=k和<k的情況,相減就是答案

這種dp方式比較套路,但是比較難想到,所以要多積累,多做這種類型的題

雖然可以使用ntt優化,但是暴力也足夠了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mo 998244353ll
ll n,k,f[2010],g[2010],jc[2010],ijc[2010],f1[2010];
ll qp(ll x,ll y){
	ll r=1;
	while(y){
		if(y&1)r=r*x%mo;
		x=x*x%mo;
		y>>=1;
	}
	return r;
}
ll c(ll x,ll y){
	return jc[y]*ijc[y-x]%mo*ijc[x]%mo;
}
ll getc(){
	jc[0]=ijc[0]=1;
	for(ll i=1;i<=n;i++){
		jc[i]=jc[i-1]*i%mo;
		ijc[i]=qp(jc[i],mo-2);
	}
	g[1]=1;
	for(ll i=2;i<=n;i++)
		g[i]=qp(2,i*(i-1)/2);
	f[1]=1;
	for(ll i=2;i<=n;i++){
		f[i]=g[i];
		for(ll j=1;j<i;j++)
			f[i]=(f[i]-f[j]*g[i-j]%mo*c(j-1,i-1)%mo+mo)%mo;
	}
}
ll solve(ll k){
	memset(f1,0,sizeof(f1));
	f1[1]=f1[0]=1;
	for(ll i=2;i<=n;i++)
		for(ll j=1;j<=min(i,k);j++)
			f1[i]=(f1[i]+f[j]*f1[i-j]%mo*c(j-1,i-1)%mo)%mo;
	return f1[n];
}
int main(){
	freopen("bomb.in","r",stdin);
	freopen("bomb.out","w",stdout);
	scanf("%lld%lld",&n,&k);
	getc();
	printf("%lld\n",(solve(k)-solve(k-1)+mo)%mo);
}

jzoj5923的更多相关文章

  1. NOIP前的刷题记录

    因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数   组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...

随机推荐

  1. yii2中的rules 自定义验证规则详解

    yii2的一个强大之处之一就是他的Form组件,既方便又安全.有些小伙伴感觉用yii一段时间了,好嘛,除了比tp"难懂"好像啥都没有. 领导安排搞一个注册的功能,这家伙刷刷刷的又是 ...

  2. Ruby环境配置

    一.rvm 1.简介 rvm是一个命令行工具,可以提供一个便捷的多版本ruby环境的管理和切换. 2.安装步骤 1.新建文件:rvm-installer.sh vi rvm-installer.sh ...

  3. Java NIO系列教程(四) Scatter 和 Gather

    Java NIO系列教程(四) Scatter 和 Gather Java NIO 开始支持 scatter/gather,scatter/gather 用于描述从 Channel(译者注:Chann ...

  4. 调用数据库-corina

    pym = mysql(host='#####', port=3306, user='######', password='########', database='algorithm') #查询数据 ...

  5. css心得体会

    非块级元素  要使得其有长宽的效果  可以设置  margin  和  padding 块级元素     可以直接设置  width  和  height div标签   要使得你内部元素居中   可 ...

  6. 20155232 2016-2017-3 《Java程序设计》第9周学习总结

    20155232 2016-2017-3 <Java程序设计>第9周学习总结 教材学习内容总结 第16章 JDBC(Java DataBase Connectivity)即java数据库连 ...

  7. HDFS系列 -- HDFS预研

    1 HDFS概述 由于传统集中式的物理服务器在存储容量和数据传输速度等方面都有限制,故而越来越不符合这些数据的实际存储需要. 在大数据时代,大数据处理需要解决的首要问题是:如何高效地存储所产生的规模庞 ...

  8. [转载红鱼儿]Delphi实现微信开发(3)如何使用multipart/form-data格式上传文件

    开始前,先看下要实现的微信接口,上传多媒体文件,这个接口是用Form表单形式上传的文件.对我来说,对http的Form表单一知半解,还好,查到这个资料,如果你也和我一样,必须看看这篇文章. 在xali ...

  9. 2018.09.11 bzoj2208: [Jsoi2010]连通数(bitset+floyd)

    传送门 听说正解是缩点+dfs? 直接bitset优化floyd传递闭包就行了.(尽管时间复杂度是假的O(n3/32)" role="presentation" styl ...

  10. 基于beego orm 针对oracle定制

    目前golang的ORM对oracle支持都没有mysql那样完整,一个orm要同时兼容mysql和oracle由于在sql语法上区别,会使整orm变的非常臃肿. 本项目是在beego orm上修改, ...