HDU2085 核反應堆【遞推】

核反應堆

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 28690 Accepted Submission(s): 12541

Problem Description
某核反應堆有兩類事件發生:
高能質點碰擊核子時,質點被吸收,放出3個高能質點和1個低能質點;
低能質點碰擊核子時,質點被吸收,放出2個高能質點和1個低能質點。
假定開始的時候(0微秒)只有一個高能質點射入核反應堆,每一微秒引起一個事件發生(對於一個事件,當前存在的所有質點都會撞擊核子),試確定n微秒時高能質點和低能質點的數目。

Input
輸入含有一些整數n(0≤n≤33),以微秒爲單位,若n爲-1表示處理結束。

Output
分別輸出n微秒時刻高能質點和低能質點的數量,高能質點與低能質點數量之間以逗號空格分隔。每個輸出佔一行。

Sample Input
5 2
-1

Sample Output
571, 209
11, 4

提示
可以使用long long int對付GNU C++,使用__int64對付VC6

Source
2006/1/15 ACM程序設計期末考試

問題鏈接HDU2085 核反應堆
問題簡述:(略)
問題分析:簡單題,用遞推和打表來解決。首先要求得遞推式。
程序說明:(略)
參考鏈接:(略)
題記:(略)

AC的C++語言程序如下:

/* HDU2085 核反應堆 */

#include <bits/stdc++.h>

using namespace std;

const int N = 33;
long long f1[N + 1], f2[N + 1];

int main()
{
    // 打表
    f1[0] = 1;
    f1[1] = 3;
    f2[0] = 0;
    f2[1] = 1;
    for(int i = 2; i <= N; i++) {
        f1[i] = 3 * f1[i - 1] + 2 * f2[i - 1];
        f2[i] = f1[i - 1] + f2[i - 1];
    }

    int n;
    while(~scanf("%d", &n) && n != -1)
        printf("%lld, %lld\n", f1[n], f2[n]);

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