• HZOI20190714 T3建造游乐场


    先放作者的正解:

    先说g吧,有i个点的话,在其中i-1个点中有$C_{i-1}^{2}$种边,每个边有选和不选两种情况。如果度不是偶数呢?用剩下那个点给他连上呗。如果剩下那个点度数不是偶数呢?这是不可能的,因为其中i-1个点,每条边会使图的总度数+2,所以图的总度数是偶数,不可能出现奇数个度为奇数的点。既然不知道剩下的点是哪个,为什么不乘n呢?仔细想想,其实所有的情况都已经枚举到了。

    #include<iostream>
    #include<cstdio>
    #define mod 1000000007
    #define LL long long
    #define int LL
    using namespace std;
    LL jc[2010];
    int n;
    int f[2010],g[2010];
    LL C[2010][2010];
    LL poww(LL a,int b)
    {
    	LL ans=1;
    	while(b)
    	{
    		if(b&1)ans=(ans*a)%mod;
    		a=(a*a)%mod;
    		b=b>>1;	
    	}
    	return ans;
    }
    signed main()
    {
    	jc[0]=1;for(int i=1;i<=2010;i++)jc[i]=jc[i-1]*i;
    	C[0][0]=1;
    	for(int i=1;i<=2010;i++)	
    	{
    		C[i][0]=1;
    		for(int j=1;j<=2010;j++)
    			C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
    	}
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		f[i]=g[i]=poww(2,C[i-1][2]);
    		for(int j=1;j<i;j++)
    			f[i]=(f[i]-f[j]*g[i-j]%mod*C[i-1][j-1]%mod+mod)%mod;
    	}
    	printf("%lld
    ",f[n]*C[n][2]%mod);
    	
    }
    
  • 相关阅读:
    构建高性能的读服务
    Redis基础入门
    基于TCP实现简单的聊天室
    递归

    Go标准库Cond
    排序(冒泡,选择,插入,快速)
    链表
    队列
    Golang实现RPC
  • 原文地址:https://www.cnblogs.com/Al-Ca/p/11186869.html
Copyright © 2020-2023  润新知