1 2 0
1 1
再次跪了,输出格式说明%lld写成了%d,又一次成功作死。有点心痛。
不过话说回来,今天周赛收获很大,总是在细节的地方出错,还是要警惕一下的。
这道题要注意错排公式(我这里打表递推列出),还有组合数的计算。
代码如下:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; long long C(int a,int b) { int c=1; for (int i=1,j=a;i<=b;i++,j--) c = c*j/i; return c; } int main() { int n; long long f[22]; f[1] = 1; f[2] = 1; f[3] = 2; f[4] = 9; for (int i=5;i<=14;i++) f[i] = (i-1)*(f[i-1]+f[i-2]); long long ans[33]; memset (ans,0,sizeof (ans)); ans[1] = 1; ans[2] = 1; for (int i=3;i<=25;i++) { int h; //一半 if (i&1) h = i/2+1; else h = i/2; for (;h<i-1;h++) { ans[i] += C(i,h)*f[i-h]; } ans[i]++; } while (~scanf ("%d",&n) && n) { printf ("%lld\n",ans[n]); } return 0; }