题目描述:

羽月最近发现,她发动能力的过程是这样的:
构建一个 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<bits/stdc++.h>
#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)continue;for(int k=0;k<=n;k++){if(k+j-1>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

2019.01.19-2018年6月NEYC集训counting相关推荐

  1. 2019.01.19-2018年6月NEYC集训sequence

    题目描述: 茉优最近研究发现,一个人的想愿能力可以认为是字符串S的一个子串S[l,r],而连接值可以认为是这个子串的本质不同子序列个数.现在她想验证她的结论是否正确,于是她给了你Q个询问,希望你帮她来 ...

  2. 数据库系统期末总结(三)(往届试卷2018年12月A卷、B卷、E卷,2019年5月A卷,选择题终篇)

    接着上次的总结:https://blog.csdn.net/qq_41938259/article/details/103532401 这是我对<数据库系统基础>第三次期末总结.这次是剩下 ...

  3. IntelliJ IDEA 2018.3.3配置 Tomcat 9,控制台出现中文乱码 “淇℃伅”(2019/01/25)

    转载:IntelliJ IDEA 2018.3.3配置 Tomcat 9,控制台出现中文乱码 "淇℃伅"(2019/01/25) - What'_up - 博客园(win10系统) ...

  4. 2018年11月26日到2019年4月26日工作汇总

    2018年11月26日到2019年4月26日工作汇总 2018年11月26日-2017年11月30日 上午:各种协议的填写,已经有关表单的培训 下午:对公司目前做的项目的培训,以及明确我当前的工作 部 ...

  5. 2018年08月19日发烧诸事记

    2018年08月19日发烧诸事记 关于发烧给敲响的警钟 八月十六日,中午突然觉的有发烧症状,会宿舍喝了些水便回去了,下午上课时情况愈加严重,浑身发冷,无法正常训练,三点多时便去永康街上的社区医疗服务中 ...

  6. a360desktop有用吗_A360 Desktop 停用 - 2018 年 6 月 19 日

    发生了哪些变化及其原因? Autodesk 一直致力于面向设计人员提供出色的软件.为了确保尽可能提供优质服务,我们会定期检查我们的产品组合,确定应将精力和资源重点投入在哪些方面,以便更好地迎合客户需求 ...

  7. 5.5 C语言练习(数日子:要求输出三个整数,分别代表年月日。例如 2018 7 19 当2018年1月1日为第一天,那么7月19日是第多少天?)

    [练习] 题目要求:数日子.要求输出三个整数,分别代表年月日.例如 2018 7 19 当2018年1月1日为第一天,那么7月19日是第多少天? #include <stdio.h>int ...

  8. NEO社区开发报告(2018年12月至2019年1月)

    这是NEO News Today 发布的第二份NEO社区开发报告.本报告涵盖了在2018年12月和2019年1月期间,NEO核心协议和社区开发者创建的独立项目的主要贡献. 社区通过了一项新倡议,各NE ...

  9. 2018年7月19日日报

    姓名:任光烨 日期:2018年7月19日 今日学习任务:学习Linux操作指令. 今日完成情况:都已完成,100~200代码. 今日开发中出现的问题汇总:无. 今日未解决问题:无. 今日开发收获:学习 ...

最新文章

  1. 不支持mac os x软件虚拟化。要运行mac os x,您需要主机VMware workstation支持硬
  2. python三层装饰器-python中自带的三个装饰器的实现
  3. 2021各国人均GDP(IMF2021年10月版)
  4. jvm jinfo 参数_jinfo:JVM运行时配置的命令行浏览
  5. MFC里NewWindow2Explorer1的一些常用处理代码
  6. 【我的物联网成长记7】物联网主流通信协议解读【华为云分享】
  7. MSE(Media Source Extensions)介绍
  8. 30 Essential Pieces Of Free (and Open) Software for Windows-windows系统30个开源软件
  9. 英语思维导图大全 数词(八)
  10. 国务院:同意浙江省实施施工图分类审查,低风险项目可不图审!
  11. c#使用office的墨迹书写工具
  12. 云从科技上市在即,或成为小一号的商汤科技?
  13. React Native 动画(Animated)笔记
  14. colojure语言基础入门
  15. 小学计算机上课课前导入视频教程,小学信息技术教学中微视频的导入实践分析...
  16. 商城电商day 06 三、商品详情业务需求分析
  17. 莱布尼兹普遍演算的定义注释--逻辑与算法之十八
  18. Oracle的trunc函数与MySQL(Maria)的truncate函数
  19. 牛客练习赛59 小松鼠吃松果(优化dp二维偏序)
  20. maven打包时本地的jar包打不进去

热门文章

  1. leetcode算法题--扁平化多级双向链表★
  2. flutter text 左对齐_Flutter基础篇之九-Text文本展示
  3. C# 开发WinCE 遇到Motorola PDA 的问题记录
  4. 中国通信企业投身罗马尼亚智慧城市建设
  5. 第二十四篇:可靠信号机制
  6. oracle goldengate报错解决之OGG-00446
  7. MongoDB:mongodb在项目开发时的安全验证、分页查询操作
  8. golan web扫雷
  9. java时间戳求时间差_时间戳换算后,截取时间相差8小时的问题
  10. iphone怎么投屏到电脑_手机怎么投屏到电脑?这几步轻松学会