程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> hdu 2200 Eddys AC難題 (數學)

hdu 2200 Eddys AC難題 (數學)

編輯:C#入門知識

從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; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved