hdu2068错排+排列组合

来源:互联网 发布:webservice添加数据 编辑:程序博客网 时间:2024/06/05 22:51

传送门:

http://acm.hdu.edu.cn/showproblem.php?pid=2068

这道题知道了错排就比较好做了

#include<iostream>  #include<sstream>       #include<string>  #include <algorithm>#include <cmath>using namespace std;  typedef long long ll;ll C(int m, int n)  {      if (n == 0)           return 1;       ll up = 1;      ll down = 1;for(int i=m;i>=m-n+1;i--)up*=i;  for(int i=1;i<=n;i++)down*=i;    return up/down;  }  int main()  {      int n;      ll inf[30];    inf[0]=inf[1]=0;    inf[2]=1;    for (int i=3;i<=25;i++)          inf[i] = (i - 1) * (inf[i - 1] + inf[i - 2]);      while (cin>>n){if(n==0)break;          ll ans = 1;        for (int i=0;i<=n/2;i++)               ans += C(n,i)*inf[i];          cout<<ans<<endl;      }return 0;  } 

坑爹的是之前我试图用全部的种类减去错一半以上的,坑爹呀

原创粉丝点击