博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Luogu5241]序列(DP)
阅读量:5226 次
发布时间:2019-06-14

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

固定一种构造方法,使它能够构造出所有可能的序列。

对于一个要构造的序列,把所有点排成一串,若a[i]=a[i-1],那么从1所在弱连通块往连通块后一个点连,若所有点都在一个连通块里了,就在1所在强连通块中随便连。若a[i]<a[i-1],那么连一条从后往前的边让若干点与1所在强连通快合并。显然这样可以得到所有可能的序列。

于是前一部分“连弱连通块”用f[i][k][x]表示前i个点在一个弱连通块中,到目前为止序列共减小了k次,1所在连通块大小为x,的方案数(此时边数为i-1+k)。

后一部分用g[i][x]表示图中共i条边,1所在连通块大小为x的方案数。

两个状态数都是$O(n^3)$的且可以用前缀和$O(1)$转移,g[][]的初值由f[][][]得到。

1 #include
2 #include
3 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 4 using namespace std; 5 6 const int N=410,mod=1e9+7; 7 int n,f[N][N][N],g[N*N][N],smf[N][N][N],smg[N*N][N],res[N*N]; 8 9 int inc(int x,int y){ x+=y; return x>=mod ? x-mod : x; }10 11 int main(){12 freopen("c.in","r",stdin);13 freopen("c.out","w",stdout);14 scanf("%d",&n); f[1][0][1]=smf[1][0][1]=1;15 rep(i,2,n) rep(k,0,i-1) rep(x,1,i){16 f[i][k][x]=f[i-1][k][x];17 if (k && i

 

转载于:https://www.cnblogs.com/HocRiser/p/10476442.html

你可能感兴趣的文章
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
字典【Tire 模板】
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
Perl IO:IO重定向
查看>>
转:基于用户投票的排名算法系列
查看>>
WSDL 详解
查看>>