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); } };
相关文章推荐
- [TopCoder] SRM 580 DIV 2, 250p, 500p, 1000p, Solution
- TopCoder SRM 557 div1
- Topcoder SRM 596 DIV 1
- topcoder SRM 548 DIV2 500
- Topcoder SRM 598 DIV 1
- [TopCoder][SRM] SRM 562 DIV 2
- Topcoder SRM 683 Div2 B
- TopCoder SRM 605 DIV1
- topcoder srm 450 div1
- Topcoder SRM 663 Div2 Hard: CheeseRolling(状压DP)
- topcoder srm 700 div1 -3
- TopCoder SRM 612 DIV1 250 EmoticonsDiv1
- Topcoder Arena SRM 144 DIV2 1100 point 图遍历(非递归)+动态规划
- topcoder srm 687 div1
- Topcoder SRM 666 DIV 1
- TopCoder——SRM 516 DIV 2
- topcoder_SRM_616_div2
- 小朋友学TopCoder(5):SRM144 DIV1 550-point
- TopCoder 250 points 11-SRM 149 DIV 1 86.62/250 34.65%
- TopCoder 250 points 16-SRM 151 DIV 2 97.63/250 39.05%