hdoj 2068 RPG的錯排
阿新 • • 發佈:2018-11-07
題目來源 http://acm.hdu.edu.cn/showproblem.php?pid=2068
錯排+組合
錯排見https://blog.csdn.net/Dear_Jia/article/details/82217803
題目source:hdoj 2068 RPG的錯排 題目大意:給n個元素n個位置,要求一半或以上的元素全部 對應編號位置,其他的全部錯排 解題思路:(組合+錯排)任選從2(1沒有錯排)到一半錯排, 其他的正確排列 #include<stdio.h> __int64 arr[15]={0,0,1}; __int64 C(int n,int m){//求C(n,m)(從n個數中選m個組合) __int64 a=1,b=1,i; for(i=1;i<=m;i++,n--){//一共需要迴圈m次,分子為n乘到n-m+1,分母為m的階乘 b=b*i; a=a*n; } return a/b; } int ErrA(){//錯排公式 for(int i=3;i<=15;i++){ arr[i]=(i-1)*(arr[i-1]+arr[i-2]); } } int main(){ int n; ErrA(); while(scanf("%d",&n)!=EOF&&n){ __int64 ans=1;//猜錯1個的時候就是猜錯0個 for(int i=2;i<=n/2;i++){ //printf("C(n,i)=%d arr[i]=%d\n",C(n,i),arr[i]); ans+=C(n,i)*arr[i]; } printf("%I64d\n",ans); } return 0; } //WA原因:錯排的數值很大,應該用long long型別