程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> hdu 4372 第一類斯特林數

hdu 4372 第一類斯特林數

編輯:關於C++
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
#include 

using namespace std;
#define INF 0x2fffffff
#define LL long long
#define MAX(a,b) ((a)>(b))?(a):(b)
#define MIN(a,b) ((a)<(b))?(a):(b)
#define MOD 1000000007
LL s[2005][2005];
LL C[2005][2005];

int main(){
    int t;
    cin >> t;
    s[0][0]=s[1][1]=1;  
    for(int i=2;i<2005;i++){  
        for(int j=1;j<=i;j++){  
            s[i][j]=s[i-1][j-1]+(i-1)*s[i-1][j];  
            s[i][j]%=MOD;  
        }  
    }  
    for(int i=0;i < 2005;i++){  
        C[i][0]=C[i][i]=1;  
        for(int j=1;j

從後面看和從前面看的分界線是最高的那根,去掉最高的那根之後還剩下n-1根,然而對於從後面和從前面看都會看到最長的那根,那根獨自成為一組,然後前後就是f-1和b-1組,然後就是總的要分為b+f-2組,你從這些組裡面取f-1或者b-1作為前後就行了,。
如果一直把前後分開算的話就要枚舉,,,,但是為什麼要分開,但是明顯前後是被最長的那根分開的,除了出現在前後的區別前後的分組其實是完全一樣的,只是出於最長那根左右的區別,去掉最長的那根自然就變成了一個把n-1個東西分成f+b-2組的問題。看完答案想到這麼多。。。。。。。

 

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