1. 程式人生 > >Java [2016年NOIP提高組] 組合數問題

Java [2016年NOIP提高組] 組合數問題

這裡寫圖片描述
輸入
第一行有兩個整數t, k ,其中t代表該測試點總共有多少組測試資料,k的意義見【問題描述】。
輸出
輸出t行,每行一個整數代表所有的 0 ≤ i ≤ n, 0 ≤j ≤ min (i, m) 中有多少對 (i, j) 滿足是 k 的倍數。
樣例輸入
1 2
3 3

樣例輸出
1

import java.math.BigInteger;
import java.util.Scanner;
import java.util.concurrent.CountDownLatch;
public class Main {
    public static void main
(String[] args) { int a[][]=new int[2010][2010]; int b[][]=new int [2010][2010]; int n,m,ans,t,k; Scanner scanner=new Scanner(System.in); t=scanner.nextInt(); k=scanner.nextInt(); a[1][1]=1%k; if (a[1][1]==0) b[1][1]++; for
(int j=2;j<=2001;j++) { for (int q=1;q<=Math.min(j,2001);q++) { if (q==1) a[j][q]=(a[j-1][q]+1)%k; else a[j][q]=(a[j-1][q]+a[j-1][q-1])%k; if (a[j][q]==0) b[j][q]=b[j][q-1
]+1; else b[j][q]=b[j][q-1]; } } for (int i=1;i<=t;i++) { n=scanner.nextInt(); m=scanner.nextInt(); ans=0; for (int j=1;j<=n;j++) ans+=b[j][Math.min(m,j)]; System.out.println(ans); } } }