zoukankan      html  css  js  c++  java
  • bzoj5219 [Lydsy2017省队十连测]最长路径 (DP)

    5219: [Lydsy2017省队十连测]最长路径

    Time Limit: 10 Sec Memory Limit: 512 MB
    Submit: 44 Solved: 26
    [Submit][Status][Discuss]
    ## Description 在Byteland一共有n个城市,编号依次为1到n,它们之间计划修建n(n-1)/2条单向道路,对于任意两个不同的点i和j,在它们之间有且仅有一条单向道路,方向要么是i到j,要么是j到i。换句话说,这是一个n个点的竞赛图。Byteasar居住在1号城市,他希望从1号城市出发,沿着单向道路不重复地访问一些城市,使得访问的城市数尽可能多。请写一个程序,帮助Byteasar计算有多少种道路修建方式,使得从1号点出发的最长简单路径经过点数恰好为k,由于答案可能很大,请对P取模输出。 ## Input 第一行包含两个正整数n,P,表示点数和模数。 2≤P≤1e9,N<=2000 ## Output 输出n行,第i行输出从1出发的最长简单路径经过点数恰好为i的竞赛图个数模P。

    最长路径长度为(k)的图一定能分成(A)(包含(1),共(k)个点)和(B)两部分,(AB)间连边一定是(B)->(A)
    (dp)一下,(dp[i][j])表示共(i)个点,最长路径长度为(j)的竞赛图个数;
    (dp[i][j]=dp[j][j]*C_{i-1}^{j-1}*2^{(i-j)*(i-j-1)/2})
    (dp[i][i]=2^{i*(i-1)/2}-sum_{j=1}^{i-1}dp[i][j])
    就是选出(j-1)个点与(1)构成(A),剩下(B)内部的边随便连;
    (dp[i][i])的话用所有的减去不合法的就行了;
    AC GET☆DAZE

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<cstdio>
    #include<vector>
    #include<cmath>
    #include<queue>
    #include<map>
    #include<set>
    #define N 2039
    #define mod 20070831
    #define inf 0x3f3f3f3f
    #define ll long long
    using namespace std;
    int n,p,pw[N*N],C[N][N],dp[N][N];
    void get_pw()
    {
    	pw[0]=1;
    	for(int a=1,b=n*(n-1)/2;a<=b;a++) pw[a]=pw[a-1]*2%p;
    }
    void get_C()
    {
    	for(int a=0;a<=n;a++) C[a][0]=1;
    	for(int a=1;a<=n;a++)
    	{
    		for(int b=1;b<=a;b++)
    		{
    			C[a][b]=(C[a-1][b]+C[a-1][b-1])%p;
    		}
    	}
    }
    int main()
    {
    	scanf("%d%d",&n,&p);
    	get_pw(),get_C();
    	for(int a=1;a<=n;a++)
    	{
    		dp[a][1]=pw[(a-1)*(a-2)/2];
    		for(int b=2;b<a;b++)
    		{
    			dp[a][b]=(ll)dp[b][b]*C[a-1][b-1]%p*pw[(a-b)*(a-b-1)/2]%p;
    		}
    		dp[a][a]=pw[a*(a-1)/2];
    		for(int b=1;b<a;b++) (dp[a][a]-=dp[a][b])%=p;
    		(dp[a][a]+=p)%=p;
    	}
    	for(int a=1;a<=n;a++)
    	{
    		printf("%d
    ",dp[n][a]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    数据可视化实例(八): 边缘直方图(matplotlib,pandas)
    数据可视化实例(七): 计数图(matplotlib,pandas)
    数据可视化实例(六): 带线性回归最佳拟合线的散点图(matplotlib,pandas)
    python 并发专题(十四):asyncio (三)实战
    python 并发专题(十三):asyncio (二) 协程中的多任务
    python 并发专题(十三):asyncio (一) 初识
    python 面向对象专题(七):异常处理
    JavaScript手册 | JS Array 对象中的unshift() 方法
    Spring框架:Bean Scopes, 声明一个Bean的范围
    Java 方法
  • 原文地址:https://www.cnblogs.com/Sinogi/p/8806706.html
Copyright © 2011-2022 走看看