我們可以記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. Js下载文件到本地(兼容多浏览器)

    在客户端通过js下载文件,试过几种下载方式,iframe方式仅限于IE浏览器,window.open(url),location.href=url 这两种方式在chrome浏览器还会是直接打开文件而不 ...

  2. Laravel中用GuzzleHttp

    阅读数:14715 今天项目中用到GuzzleHttp,开始不知道怎么用,其实还是很简单的. 直接在项目根目录,输入以下命令 composer require guzzlehttp/guzzle 1 ...

  3. jsp 页面 摘要, 要截取字符串 ,当时 字符串中包含 html标签,截取后无法显示

    如题: 处理办法: 1.  使用struts标签 <s:property  value ="#text.replaceAll('<[^>]+>','').substr ...

  4. Tomcat连接池配置

    今日做了个小网站,数据量不大,但当发布到虚拟主机上之后,接连不断的遇到各种问题. 被折磨了数日后,在网上查了大量的相关资料,现总结如下. 一.项目在上传到远程服务器的过程中,有可能丢失文件,或文件内容 ...

  5. chrome审查元素功能,web开发强大帮手

    怎样打开Chrome的开发者工具? 你可以直接在页面上点击右键,然后选择审查元素: 或者在Chrome的工具中找到: 或者,你直接记住这个快捷方式: Ctrl+Shift+I (或者Ctrl+Shif ...

  6. 浅析10种常见的黑帽seo手法

    虽然博主并不认同黑帽seo手法,但是一些常见的黑帽手法还是需要了解的,增加自己对黑帽的认知,也可以在自己优化网站时适时的规避开这些黑帽手法,从而避免自己的网站被搜索引擎惩罚.好了,话不多说,下面进入今 ...

  7. 2018.10.04 NOIP模拟 K进制(模拟)

    传送门 签到题,直接瞎模拟就行了. 代码

  8. 2018.09.14 洛谷P3931 SAC E#1 - 一道难题 Tree(树形dp)

    传送门 简单dp题. f[i]表示以i为根的子树被割掉的最小值. 那么有: f[i]=min(∑vf[v],dist(i,fa))" role="presentation" ...

  9. 21 Survival of Desert Life 沙漠生命的延续

    Survival of Desert Life 沙漠生命的延续 ① Some desert animals can survive the very strong summer heat and dr ...

  10. java中File的delete和deleteOnExit区别(转)

    Java的File类中有两个delete方法:delete和deleteOnExit delete无需解释,为直接删除,deleteOnExit文档解释为:在虚拟机终止时,请求删除此抽象路径名表示的文 ...