题目描述:

羽月最近发现,她发动能力的过程是这样的:
构建一个 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. 高可用 Prometheus 架构实践中的踩坑集锦
  2. soalris小記...
  3. 魅蓝5s的android系统版本,魅族魅蓝5S的手机系统是什么
  4. python编程案例教程书籍-Python程序设计案例教程
  5. Linux中常见命令和单词的缩写全称
  6. Winsock开发网络通信程序的经典入门
  7. Sublime3 快捷键
  8. [译] APT分析报告:08.漏洞利用图谱–通过查找作者的指纹来寻找漏洞
  9. 设计模式- 策略模式
  10. php编写服务器端脚本程序,PHP脚本语言写的简单服务器程序
  11. python自动化测试框架有哪几种_Python自动化测试-Unittest单元测试框架详解
  12. 事态升级是什么意思_为什么有的人越到关键时刻越容易掉链子?记住不要有“赌徒心理”...
  13. vs binsum
  14. 【超级综述】BERT、GPT-3们有了新名字:Percy Liang、李飞飞等发布200多页综述,阐述大模型机遇与风险...
  15. m序列的原理以及verilog实现
  16. 游戏实时语音SDK是怎么炼成的
  17. Oracle 夺得榜首,MySQL 稳居第二 ,10月数据库排行榜出炉!
  18. html怎么取消转义字符,正确取消html字符的转义
  19. 免费短信九成暗藏陷阱
  20. [Python]获取起点小说网的更新情况

热门文章

  1. 采购订单模板_电子信息制造业解决方案,电子工业采购监管、管理、降本可控化...
  2. 电脑温度测试软件_网购电脑够便宜?坑连着坑真的不好躲
  3. linux 界面工具 qt,Qt主窗口中的工具栏
  4. java解析nes_Java 读写 excel 实战完全解析
  5. VirtualBox中linux和windows建立桥接
  6. 搭建“双11”大型网站架构必须掌握的 5 个核心知识
  7. 第三方账号登陆的过程及由此引发的血案
  8. Linux中如何杀掉僵尸进程
  9. ISIS和OSPF的比较
  10. 前端交接文档_开发型Web前端和设计型Web前端的区别是什么?