問題 i: qaq的問題
時間限制: 1 sec 記憶體限制: 128 mb
提交: 11 解決: 3
[提交][狀態][討論版]
題目描述
有m個不同的陣地,每個陣地上可以留守任意個士兵(為非負數)。現在qaq有n個士兵,他需要選擇至少乙個陣地才可以獲得勝利。qaq的一貫原則——讓所有士兵留守在他選擇的陣地上。問有多少種安排方案使得qaq獲得勝利。為了降低難度,qaq在選擇的陣地上不留守士兵也是合法的。
方案數的不同判定只能依據下面三條:
(1)選擇的陣地數目不同
——選擇1個陣地和選擇2個陣地。
(2)選擇的陣地不同
——選擇陣地1、2和選擇陣地2、3。
(3)在選擇的陣地中任意兩個陣地留守士兵數目不同
——陣地1有a人、陣地2有b人;陣地1有c人、陣地2有d人。其中a != c || b != d 且a、b、c、d均為非負數。
舉個例子:有2個士兵和2個陣地,方案數為5。
(1)選擇1個陣地方案數為2 —— 選擇陣地1並留守2個士兵 或者 選擇陣地2並留守2個士兵。
(2)選擇2個陣地方案數為3 —— 在陣地1、2留守士兵人數為0 2、2 0、1 1。
這裡要注意:不能依據每個陣地的人數來判定(1)裡面的方案2 !0、!0 2和(2)的2 0、 0 2重複,因為前提選擇的陣地數目不同。
輸入有多組測試資料,請處理到檔案結束。
每組資料給定兩個整數n和m,分別表示士兵人數和陣地數目。1 <= n, m <= 50。
輸出每組資料輸出乙個整數表示不同的方案數。由於結果可能很大,你只需要輸出 % 777的結果。
解釋一下,如果最後結果為777,你只需要輸出777 % 777 = 0。
樣例輸入
2 246 37
1 1樣例輸出50
思路:迴圈選的陣地數k,1<=k<=m,從m中選k個,從k中選出t個(陣地中士兵不為0的)陣地,將n個士兵分到t個陣地中(c(n-1,t-1))。
公式:c ( n , k ) = c ( n - 1 , k - 1 ) + c ( n - 1 , k ) ;
**:
#include#include#includeusing namespace std;
int n,m;
int c[60][60];
int a(int nn,int ii)
int main()
return 0;
}
QAQ的幸運數字 數學
time limit 1000ms memory limit 65536kb submit statistic problem description 金牌巨 qaq 經常靠漲人品 rising rp 來 a 題。他的幸運數字是 4 和 7,因此他也經常在第 4 發或第 7 發提交時過題 誤 一天,...
問題 穀神的賭博遊戲 數學思維 排列組合
neuq 的穀神要和我賭乙個遊戲 穀神要求我隨機在紙上寫出整數集合 n 是整數 的乙個排列 即不重複的隨機寫出從 1 到 3n 1 的所有整數 並且要求在我寫的過程中,從我寫的第乙個數開始一直加到我正在寫的數的總和不被 3 整除。如果我能寫出來符合要求的乙個排列,那麼我就贏得遊戲。那麼問題來了,我贏...
數學上的排列組合
下午一同事提出乙個有趣的問題 一行字母 數字符號也行 中間插入特定字元 字元型別不定,我這裡用加號 字母的順序不能變,如下 ab a b 1種 abc a bc ab c a b c 3種 abcd a bcd ab cd a b cd abc d a bc d ab c d a b c d 7種 ...