從n個人中選全部或部分人,然後將這些人分成兩部分,要求其中一部分的最小值大於另一部分的最大值
假設n個人的ac數量按從小到大排列,可以從中任選m個人(n=>m>=2),
再把這m個人分2組(每個人都要分組),要是滿足最小ac數大於最大ac數,只需要在m
個人中插板即可。例如:
m個人假如分別為 :
1,2,3,4,......m-1,m (m個人的ac數從小到大排列)
只需在任意位置插板就可分為符合要求的2組:
1,2,3......t, || t+1...m-1,m (1<=t<m)
則 1,2,3......t 為一組
t+1,t+2,......m-1,m 為一組
很明顯這樣分組符合要求,在這m人中共有m-1種分法(t取不同值)
[csharp]
#include"stdio.h"
__int64 fun(__int64 m,__int64 n)
{
__int64 s=1,i;
for(i=1;i<=m;i++)
s=s*(n-i+1)/i;//等於c(n,m);
return s;
}
int main()
{
__int64 n,i,sum;
while(scanf("%I64d",&n)!=EOF&&n)
{
sum=0;
for(i=2;i<=n;i++)
sum+=(i-1)*fun(i,n);
printf("%I64d\n",sum);
}
return 0;
}