您的位置:首页 > 运维架构

topcoder srm 531 div2 600pt

2012-02-01 23:17 411 查看
鸟题目 ...代码写的超难看,终于过了。。。

#include<iostream>
#include<cstring>
using namespace std;
const int mod=1000000007;

class NoRepeatPlaylist{public:
long long int dp[111];
    bool vis[111];
    long long int c[111][111];    
    bool you[111][111];
	long long int cc(int x,int y)
    {
        if(y==0)
        {
            return 1;
        }     
        if(y==1)
        {
            return x;    
        }   
        if(x==y)
        {
            return 1;
        }
        if(you[x][y])
        {
            return c[x][y];
        }
        else
        {
            you[x][y]=true;
            c[x][y] = cc(x-1,y) + cc(x-1,y-1);
            c[x][y] %= mod;
            return c[x][y];
        }
    }
	long long int f(int n,int m,int p)
	{
		if(m + 1 > n) 
		{
			return 0;
		}
		long long ans=1;
		long long temp;
		for(long long int i=n;i>=n-m;i--)
		{
			ans*=i;
			ans%=mod;
		}
		temp = n - m ;
		for(long long int i=1;i<=p-m-1;i++)
		{
			ans*=temp;
			ans%=mod;
		}		
		return ans;
	}  
    long long int x(int n,int m ,int p)
    {       
        if(m+1>n)
        {
           if(p!=n)
            return 0;
            else
            {
                long long int temp=1;
                for(int i=n;i>=1;i--)
                {
                    temp*=i;
                    temp%=mod;
                }                   
                return temp;
            }
        }    
        if(vis
)      
        {
            return dp
;
        }
        else
        {
            long long int temp=0;
            for(int i=1;i<=n-1;i++)
            {
                temp += cc(n,i)*x(i,m,p);
                temp %=mod;
            }
            dp
=f(n,m,p) - temp;
            while(dp
<0)
            {
            	dp
+=mod;
            }
            dp
%=mod;
            vis
=true;
            return dp
;
        }
    }
    long long int numPlaylists(int n, int m, int p)
	{
        memset(vis,false,sizeof(vis));	
        memset(you,false,sizeof(you));
        return x(n,m,p);
	}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: