jzoj5923
我們可以記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的更多相关文章
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
随机推荐
- Navicat Premium 12破解补丁
Navicat Premium 12破解补丁是专门针对Navicat 12制作的一款破解工具,它可以帮助大家成功激活软件,激活后就可以免费使用软件所有功能了,小编亲测可用,有需要的可以下载试试. Na ...
- Golang之定时器,recover
滴答滴答……定时器的使用 package main import ( "fmt" "time" ) //定时器的使用 func main() { t := ti ...
- Spring缓存配置遇到的坑
基本配置 <cache:annotation-driven cache-manager="cacheManager"/> <bean id="cache ...
- RSA生成、加密、解密、签名。
首先,要会生成RSA密码对. https://app.alipay.com/market/document.htm?name=saomazhifu#page-23 (事例中的密钥对好像有问题,最 ...
- jsp札记
日期格式化 <s:date name="creaetime" format="yyyy-MM-dd HH:mm:ss" /> <base hr ...
- 8.15 session 有效时间, session在数据查询中最后不用
1.在tomcat-->conf-->conf/web.xm中的<session-config>中设置: <session-config> <session- ...
- centos_x64 6.4 安装jdk1.7
1.行到user目录下新建一个java目录 #cd /usr #mkdir java #cd /usr/java/ 2.下载jdk 先从oracle找到要下载的jdk地址然后 wget http:// ...
- 专2-第二课 Eclipse开发环境搭建
2.1下载Eclipse 2.2 安装C/C++版本的Eclipse 2.3 安装JDT插件开发Java程序 2.4 使用Eclipse开发驱动程序 既然安装了eclipse来进行驱动学习,那么我们就 ...
- 2018.09.29 bzoj3156: 防御准备(斜率优化dp)
传送门 斜率dp经典题目. 然而算斜率的时候并没有注意到下标的平方会爆int于是咕咕*2. 这道题我用了两个数组来表示状态. f[i]f[i]f[i]表示最后i个位置倒数第i个放木偶的最优值. g[i ...
- 2018.09.22 atcoder Integers on a Tree(构造)
传送门 先考虑什么时候不合法. 第一是考虑任意两个特殊点的权值的奇偶性是否满足条件. 第二是考虑每个点的取值范围是否合法. 如果上述条件都满足的话就可以随便构造出一组解. 代码: #include&l ...