ACM--steps--dyx--2.3.7--下沙的沙子有幾粒?

下沙的沙子有幾粒?

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 921 Accepted Submission(s): 526
 
Problem Description
2005年11月份,我們學校參加了ACM/ICPC 亞洲賽區成都站的比賽,在這裏,我們獲得了歷史性的突破,儘管只是一枚銅牌,但獲獎那一刻的激動,也許將永遠銘刻在我們幾個人的心頭。藉此機會,特向去年爲參加ACM亞洲賽而艱苦集訓了近半年的各位老隊員表示感謝。
實際上,除了獲獎以外,在這次比賽期間還有一件事也讓我們記憶深刻。那是比賽當天等待入場的時候,聽到某個學校的一個隊員在說:“有個學校的英文名很有意思,叫什麼Hangzhou Dianzi University”. 哈哈,看來我們學校的英文名起的非常好,非常吸引人呀。
不過,事情的發展誰也沒有料到,隨着杭電英文校名的這一次曝光,影響越來越大,很多人開始對杭電英文校名進行研究,不久以後甚至還成立了一個專門的研究機構,叫做“HDU 校名研究會”。並不斷有報道說-相-當-多的知名科學家改行,專門對該問題進行研究,學術界稱之爲“杭電現象”。很多人在國際知名期刊上發表了研究論文,這其中,尤以中國超級女科學家宇春小姐寫的一篇研究報告最爲著名,報告發表在science上,標題是“杭電爲什麼這樣紅?” 文中研究發現:Hangzhou Dianzi University這個校名具有深刻的哲學思想和內涵,她同時提出了一個大膽的猜想:“假定一個字符串由m個H和n個D組成,從左到右掃描該串,如果字符H的累計數總是不小於字符D的累計數,那麼,滿足條件的字符串總數就恰好和下沙的沙粒一樣多。”
這就是當今著名的“宇春猜想”!
雖然還沒能從數學上證明這個猜想的正確性,但據說美國方面在小布什的親自幹預下,已經用超級計算機驗證了在(1<=n<=m<=1000000000000)時都是正確的。my god! 這是一個多麼偉大的猜想!雖然我們以前總說,21世紀是屬於中國的,可還是沒想這一天來的這麼早,自豪ing... + 感動ing...
感動和自豪之餘,問題也來了,如果已知m和n的值,請計算下沙的沙粒到底有多少。

Ps: 
1. 中國有關方面正在積極行動,着手爲宇春小姐申報諾貝爾獎。
2、“宇春猜想”中提到的H和D組成的字符串現在被學術界成爲“杭電串串”(“杭電串串”前不久被一個賣羊肉串的註冊了商標,現在我校正在積極聯繫買斷,據說賣方的底價是1000萬歐元,絕不打折,看來希望不大,sigh...)
 
Input
輸入數據包含多個測試實例,每個佔一行,由兩個整數m和n組成,m和 n 分別表示字符串中H和D的個數。由於我們目前所使用的微機和老美的超級計算機沒法比,所以題目給定的數據範圍是(1<=n<=m<=20)。
 
Output
對於每個測試實例,請輸出下沙的沙粒到底有多少,計算規則請參考“宇春猜想”,每個實例的輸出佔一行。
 
Sample Input
1 1
3 1
 
Sample Output
1
3
 
Author
lcy
 
Source
HDU 2006-4 Programming Contest
 
Recommend
lxj
 
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    //在這道題中,遞推方程爲
    //dp[m,n]=dp[m-1,n]+dp[m,n-1];
    //m表示H的字符個數,n表示D的字符個數.
    //題目中要求的必須要m>=n纔可以成立/.
    //所以有兩個限制條件。
    //1),當n等於0的時候,dp[m][0]=1;
    //2),當m<n的時候,dp[m][n]=0;
     long long dyx[29][29];
     memset(dyx,0,sizeof(dyx));
     for(int i=1;i<26;i++)
     {
         dyx[i][0]=1;
     }
     for(int i=1;i<21;i++)
     {
         for(int j=i;j<21;j++)
         {
             //因爲H的累計長度一定要大於等於D的累計長度.
             dyx[j][i]=dyx[j-1][i]+dyx[j][i-1];
         }
     }
     int m,n;
     while(cin>>m>>n)
     {
         cout<<dyx[m][n]<<endl;
     }
     return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章