題目描述:
題目背景:noip2016 提高組 day2 t1
組合數 表示的是從 n 個物品中選出 m 個物品的方案數。舉個例子,從 (1,2,3) 三個物品中選擇兩個物品可以有 (1,2),(1,3),(2,3) 這三種選擇方法。根據組合數的定義,我們可以給出計算組合數 的一般公式:
=1×2
×...
×n。
小蔥想知道如果給定 n,m 和 k,對於所有的 0≤i≤n,0≤j≤min(i,m) 有多少對 (i,j) 滿足
輸入格式:
第一行有兩個整數 t,k,其中 t 代表該測試點總共有多少組測試資料,k 的意義見【問題描述】。
接下來 t 行每行兩個整數 n,m,其中 n,m 的意義見【問題描述】。
輸出格式:
輸出 t 行,每行乙個整數代表所有的 0≤i≤n,0≤j≤min(i,m) 中有多少對 (i,j) 滿足
樣例輸入1:
1 2
3 3
樣例輸出1:
1樣例輸入2:
2 5
4 5
6 7
樣例輸出2:
0 7
備註:
樣例1說明:在所有可能的情況中,只有 是 2 的倍數。
資料規模與約定:
題目分析:
由組合數與楊輝三角的對應關係可知遞推公式。令f[
i][j
] 代表
i][j
]=f[
i−1]
[j−1
]+f[
i−1]
[j] 。所以我們可以預處理出所有組合數,就得知是否是k的倍數。為避免爆int,更新時模k,這不影響判斷。再開乙個陣列an
s[i]
[j] ,記錄對於i這一維到j時滿足要求的數的個數。最後答案就是累加an
s[1]
[min
(1,j
)]+a
ns[2
][mi
n(2,
j)]+
⋅⋅⋅⋅
⋅⋅+a
ns[i
][mi
n(i,
j)] 。
附**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=2010;
const
int n=1e4+10;
int t,k,maxx,maxy,f[maxn][maxn],ans[maxn][maxn],n[n],m[n],sum;
void pre()
}int main()
pre();
for(int i=1;i<=t;i++)
printf("%d\n",sum);
}return
0;}
NOIP2016 組合數問題
題目描述 第一行有兩個整數t,k,其中t代表該測試點總共有多少組測試資料,k的意義見 問題描述 接下來t行每行兩個整數n,m,其中n,m的意義見 問題描述 t行,每行乙個整數代表答案。輸入樣例 1 1 23 3 輸入樣例 2 2 54 5 6 7 輸出樣例 1 1輸出樣例 2 07 樣例1說明 在所...
NOIP2016組合數問題
題目分析 dp不解釋。首先要來乙個組合數將cnm的值都預處理出來,不過在加起來的時候記得取模。接下來就是二維字首和的事情了。define m 2000 include include include include using namespace std int c m 3 m 3 sum m 3 ...
NOIP2016 組合數問題
組合數表示的是從n個物品中選出m個物品的方案數。舉個例子,從 1,2,3 三個物品中選擇兩個物品可以有 1,2 1,3 2,3 這三種選擇方法。根據組合數的定 義,我們可以給出計算組合數的一般公式 其中n 1 2 n 小蔥想知道如果給定n,m和k,對於所有的0 i n,0 j min i,m 有多少...