每个输入包含一个测试用例。
每个测试用例的第一行包含一个整数,表示歌单的总长度K(1<=K<=1000)。
接下来的一行包含四个正整数,分别表示歌的第一种长度A(A<=10)和数量X(X<=100)以及歌的第二种长度B(B<=10)和数量Y(Y<=100)。保证A不等于B。
输出一个整数,表示组成歌单的方法取模。因为答案可能会很大,输出对1000000007取模的结果。
5 2 3 3 3
9
import java.util.*; public class Main { static long mod = 1000000007l; public static void main(String[] args) { // TODO Auto-generated method stub long[][] c = new long[101][101]; for (int i = 0; i <=100; i++) { // 行头初始化 c[i][0] = 1; } for (int i = 1; i <= 100; i++) { for (int j = 1; j <= 100; j++) { c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod; } } long result = 0; Scanner scanner = new Scanner(System.in); int k = scanner.nextInt(); int a = scanner.nextInt(); int x = scanner.nextInt(); int b = scanner.nextInt(); int y = scanner.nextInt(); for (int i = 0; i < x; i++) { int temp = k - a * i; if (temp >= 0) if (temp % b == 0) if (temp / b <= y){ long temp_c= (c[x][i] * c[y][temp / b]) % mod; result+=temp_c; result%=mod; } } System.out.println(result); } }求教为什么最后的结果一直 答案错误:您提交的程序没有通过所有的测试用例 case通过率为90.00% 测试用例: 100 1 100 2 100 对应输出应该为: 480218926 你的输出为: 480218925
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int length = scan.nextInt(); int A = scan.nextInt(); int X = scan.nextInt(); int B = scan.nextInt(); int Y = scan.nextInt(); System.out.println(qlist(length, A, X, B, Y)); } public static long qlist(int length, int A, int X, int B, int Y) { long mod = 1000000007; // 构建杨辉三角 int max = 101; long[][] tri = new long[max][max]; tri[0][0] = 1; for (int i = 1; i < max; i++) { tri[i][0] = 1; for (int j = 1; j < max; j++) { tri[i][j] = (tri[i - 1][j - 1] + tri[i - 1][j]) % mod; } } long sum = 0; for (int value = 0; value <= length; value++) { if (value % A == 0 && (length - value) % B == 0 && value/A <= 100 && (length - value) / B <= 100) { sum += tri[X][value / A] * tri[Y][(length - value) / B] % mod; } } return sum % mod; } }杨辉三角 ac
public class SongSheetForQ {
public static long[][] arr = new long[101][101];
public static long constituteMethod(int K, int A, int X, int B, int Y){
long result = 0;
int length;
arr[0][0] = 1;
for (int i = 1; i <= 100; i++){
arr[i][0] = 1;
for (int j = 1; j <= 100; j++) {
arr[i][j] = (arr[i - 1][j] + arr[i - 1][j - 1]) % 1000000007;
}
}
for (int i = 0; i <= X; i++){
length = K - A * i;
if (length >= 0 && length % B == 0 && length / B <= Y){
result += (arr[X][i] * arr[Y][length / B]);
}
}
return result % 1000000007;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int K = sc.nextInt();
int A = sc.nextInt();
int X = sc.nextInt();
int B = sc.nextInt();
int Y = sc.nextInt();
sc.close();
System.out.println(constituteMethod(K, A, X, B, Y));
}
}