模拟火车2019中国线路手机版_com.neon.cube2048

模拟火车2019中国线路手机版_com.neon.cube2048jzoj6009. 【THUWC2019模拟2019.1.18】Counting (dp)

大家好,又见面了,我是你们的朋友全栈君。

Description

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

Data Constraint

对于 10%的数据,1<=V<=5
对于 30%的数据,1<=V<=20
对于 60%的数据,1<=V<=50
对于 100%的数据,1<=V<=100

solution

全场切的题目咱连题目都看不懂对咱来说已经是日常了

题解觉得这题太水于是只有一句话于是咱只好对着一份代码理解了半天

考虑一个策略,我们维护一条链\(1\)\(i\),如果连的下一条边需要不减少强连通分量个数,那么就连上\((i,i+1)\),如果需要减少强连通分量个数,那么就在链上选一个点向前连边

不难发现,每一种强连通分量序列的情况,都可以通过这种策略来表示

考虑\(dp\),设\(dp_{i,j,k}\)表示连了\(i\)条边,上面有\(j\)个点已经在强连通分量里了,对于链维护到了\(1\)\(k\),那么枚举下一条边,考虑它是未增加强连通分量个数或者减少的强连通分量个数,转移即可

还有一种尴尬的情况就是点全都连完了,但我们还需要使强连通分量个数不变,这种时候往前连一条没用的边就行了

顺带注意,我们在连环边和无用边的时候可能会有边爆掉的情况,设链上有\(n\)个点,有\(j\)个在环里(即强连通分量),那么链上的每个点可以向后面的所有点连边,环上的每个点可以向前面的所有点连边,就算全部连满,边数也不能超过\(\frac{n(n+1)+j(j+1)}{2}\)

然后就没有然后了,理论上来说时间复杂度\(O(v^5)\),只要用刷表法,判断一下当前状态是否可行就行了

//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
inline int max(const R int &x,const R int &y){return x>y?x:y;}
inline int min(const R int &x,const R int &y){return x<y?x:y;}
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
    R int res=1,f=1;R char ch;
    while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
    for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
    return res*f;
}
char sr[1<<21],z[20];int K=-1,Z=0;
inline void Ot(){fwrite(sr,1,K+1,stdout),K=-1;}
void print(R int x){
    if(K>1<<20)Ot();if(x<0)x=-x,sr[++K]='-';
    while(z[++Z]=x%10+48,x/=10);
    while(sr[++K]=z[Z],--Z);sr[++K]=' ';
}
const int N=105,P=998244353;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R int y){
    R int res=1;
    for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);
    return res;
}
int dp[N*N][N][N];
int n,res;
int main(){
//  freopen("testdata.in","r",stdin);
    freopen("counting.in","r",stdin);
    freopen("counting.out","w",stdout);
    scanf("%d",&n);
    dp[0][1][1]=1;
    fp(i,0,n*(n-1)-1)fp(j,1,min(n,i+1))fp(k,j,min(n,i+1))
    if(dp[i][j][k]){
        if(i<=k+j-2&&k<n)dp[i+1][j][k+1]=add(dp[i+1][j][k+1],dp[i][j][k]);
        else if(k*(k-1)+j*(j-1)>=(i+1<<1))dp[i+1][j][k]=add(dp[i+1][j][k],dp[i][j][k]);
        fp(l,1,k-j)
        if(k*(k-1)+(j+l)*(j+l-1)>=(i+1<<1))dp[i+1][j+l][k]=add(dp[i+1][j+l][k],dp[i][j][k]);
    }
    fp(i,1,n*(n-1)){
        res=0;
        fp(j,1,min(n,i+1))fp(k,j,min(n,i+1))res=add(res,dp[i][j][k]);
        print(res);
    }
    return Ot(),0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10292866.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107045.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在毕设中学习03

    在毕设中学习035.24文献阅读记录脑电分为诱发性脑电和自发性脑电,诱发性脑电的诱发因素又分为外源性刺激(视觉听觉触觉)和内源性事件相关(计算、思考)keras库keras以TensorFlow/Theano作为后端封装,是一个专门用于深度学习的python模块。包含了全连接层,卷积层,池化层,循环层,嵌入层等等等,常见的深度学习模型。包含用于定义损失函数的Losses用于训练模型的Optimizers评估模型的Metrics定义激活函数的Activations防止过拟合的Regularizers等mn

    2022年8月11日
    7
  • contextConfigLocation 配置

    contextConfigLocation 配置web.xml通过contextConfigLocation配置spring的方式SSI框架配置文件路径问题:struts2的1个+N个路径:src+src(可配置)名称:struts.xml+Nspring的1个路径:src名称:applicationContex…

    2022年6月15日
    36
  • 新遇到的问题 , 进程退出代码是 ‘0xffffffff’

    新遇到的问题 , 进程退出代码是 ‘0xffffffff’最近新做了系统发现IIS无法正常发布网站,网上提供了很多办法,都未解决。解决过程一波三折,依次用了下列方法:1、解决办法点击“开始”-“控制面板”-“管理工具”-“组件服务”-“计算机”-“我的电脑”-“DCOM”选项,选择其下的“IISADMINSERVICE”,右健选择“属性”,找到“安全”,在“启动和激活权限”中编辑“自…

    2022年5月16日
    165
  • 各种光纤接口类型介绍图_光纤sc接口是什么形状

    各种光纤接口类型介绍图_光纤sc接口是什么形状各种光纤接口类型介绍ST、SC、FC光纤接头是早期不同企业开发形成的标准,使用效果一样,各有优缺点。ST、SC连接器接头常用于一般网络。ST头插入后旋转半周有一卡口固定,缺点是容易折断;SC连接头直接插拔,使用很方便,缺点是容易掉出来;FC连接头一般电信网络采用,有一螺帽拧到适配器上,优点是牢靠、防灰尘,缺点是安装时间稍长。MTRJ型光纤跳线由两个高精度塑

    2025年7月30日
    3
  • python join函数_Python join()函数原理及使用方法

    python join函数_Python join()函数原理及使用方法函数:string.join()Python中有join()和os.path.join()两个函数,具体作用如下:join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串os.path.join():将多个路径组合后返回一、函数说明1、join()函数语法:’sep’.join(seq)参数说明sep:分隔符。可以为空seq:要连接的元素序列、字…

    2025年7月31日
    3
  • python抛出异常和捕获异常_在try块中可以抛出异常吗

    python抛出异常和捕获异常_在try块中可以抛出异常吗PythonLearnPython抛出异常【1】程序运行过程中Python解释器遇到一个错误会停止程序的运行并且提示一些错误信息这个就是异常程序停止并且提示错误信息的动作叫做抛出异常抛出异常原因 主动捕获异常可以增加健壮性抛出异常的种类AssertionError,断言失败抛出异常;AttributeError,找不到属性抛出异常;ValueError,…

    2022年10月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号