【题目描述】
【思路】
动态规划 组合问题
import java.util.Scanner;
public class Main{
static int N = 1010;
static int mod = 100000007;
static int f[][] = new int [N][N];// f[i][j]表示前i个数且其和除以s余为j的方案的集合
public static int get_mod(int x, int n){//可能为负数 将[- n + 1, 0]映射为[0, n - 1]
return (x % n + n) % n;
}
public static void main(String args[]){
Scanner reader = new Scanner(System.in);
int n = reader.nextInt(), s = reader.nextInt(), a = reader.nextInt(), b = reader.nextInt();
f[0][0] = 1;
for(int i = 1; i < n; i ++)
for(int j = 0; j < n; j ++)
{
f[i][j] = (f[i - 1][get_mod(j - a * i, n)] + f[i - 1][get_mod(j + b *i, n)])% mod;
}
System.out.println(f[n - 1][n - 1]);
}
}