博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019.01.19-2018年6月NEYC集训counting
阅读量:6979 次
发布时间:2019-06-27

本文共 1641 字,大约阅读时间需要 5 分钟。

题目描述:

羽月最近发现,她发动能力的过程是这样的:

构建一个 V 个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些边依次加入图中,每次加入之后计算当前图的强连通分量个数并记下来,最后得到一个长度为E 的序列,这个序列就是能力的效果。
注意到,可能存在边的序列不同而能力效果相同的情况,所以羽月想请你帮她计算能发动的不同能力个数,答案对 998244353 取模。你需要对于1<=E<=V*(V-1)的所有 E 计算答案。

算法标签:前缀和优化dp

思路:

考虑对于一个可行的序列,令组成方案表示成一个大的包含多个点的强连通分量,其余点都为单独的连通分量能表示所以情况。

我们考虑一次把x个点缩进大的连通分量,需要x+1条边。

对于已有j个点在大连通分量内时,边至多只有j*j+(n-j)*(n-j+1)/2+j*(n-j)条。

倘若令k为缩过几次点,则边至少有j+k-1条。

考虑dp

令f[i][j][k]表示加到第i条边,有j个点在大连通分量内,锁了k次点。

式子是:

f[i][j][k]=f[i-1][j][k]+∑f[i-1][j-p][k]

于是考虑前缀和优化,记sum[j-1][k]为∑f[i-1][j-p][k]

以下代码:

#include
#define il inline#define _(d) while(d(isdigit(ch=getchar())))using namespace std;const int N=105,p=998244353;int n,f[2][N][N],op,sum[N][N];il int read(){ int x,f=1;char ch; _(!)ch=='-'?f=-1:f;x=ch^48; _()x=(x<<1)+(x<<3)+(ch^48); return f*x;}il int mu(int x,int y){ if(x+y>=p)return x+y-p; return x+y;}int main(){ n=read();f[0][1][0]=1;for(int i=0;i<=n;i++)sum[1][0]=1; for(int i=1;i<=n*(n-1);i++){ op^=1; for(int j=1;j<=n;j++)for(int k=0;k<=n;k++)f[op][j][k]=0; for(int j=1;j<=n;j++){ if(j*(j-1)+(n-j)*(n-j-1)/2+j*(n-j)
i)break; if(k)f[op][j][k]=mu(f[op^1][j][k],sum[j-1][k-1]); else f[op][j][k]=f[op^1][j][k]; } } int ans=0; for(int j=1;j<=n;j++){ for(int k=0;k<=n;k++){ sum[j][k]=mu(sum[j-1][k],f[op][j][k]); ans=mu(ans,f[op][j][k]); } } printf("%d ",ans); }puts(""); return 0;}
View Code

 

转载于:https://www.cnblogs.com/Jessie-/p/10291538.html

你可能感兴趣的文章
hao123联盟新政的机制效用
查看>>
vSphere 6.5密码正确不能登录解决方法
查看>>
ACM HDU 1020Encoding
查看>>
Nvelocity中全选+批量删除
查看>>
jquery常用代码片段
查看>>
Lync 2010 标准版安装注意事项
查看>>
防不胜防 了解DNS缓存中毒攻击原理
查看>>
“.NET研究”如何发布你的Android应用程序
查看>>
等级滤波器(泛化的腐蚀、膨胀和中值滤波)
查看>>
软件开发告诫
查看>>
20120213 情人节前一天 南京 买的碧桂园凤凰城的房子
查看>>
Windows Image Lists
查看>>
c 基础系列--- define struct and init struct array
查看>>
POJ 1755 Triathlon
查看>>
【吼吼睡cocos2d学习笔记】第二章 - 开始学习
查看>>
Shell知识积累
查看>>
SQL Server 2012清除连接过的服务器名称历史?
查看>>
Volatile相关知识
查看>>
过载保护
查看>>
使用 Socket 通信实现 FTP 客户端程序
查看>>