第二题代码:
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String num = cin.nextLine();
String[] nums = num.split(" ");
int n = Integer.parseInt(nums[0]); //红球数量
int m = Integer.parseInt(nums[1]); //蓝球数量
double res = process(n, m);
System.out.printf("%.5f", res);
}
public static double process(int n, int m){
double[][] dp = new double[n + 1][m + 1];
for (int i = 1; i <= n; i++) {
dp[i][0] = 1;
}
for (int i = 0; i <= m; i++) {
dp[0][i] = 0;
}
dp[1][1] = 0.5;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (i + j < 3 || j < 2){
dp[i][j] = (double) i / (i + j);
}else if (j < 3){
dp[i][j] = (double) i / (i + j) +
(double) j / (i + j) * (double)(j - 1) / (i + j - 1) * (double)i / (i + j - 2) * dp[i - 1][j - 2];
}else{
dp[i][j] = (double) i / (i + j) +
(double) j / (i + j) * (double)(j - 1) / (i + j - 1) * (double)(j - 2) / (i + j - 2) * dp[i][j - 3] +
(double) j / (i + j) * (double)(j - 1) / (i + j - 1) * (double)i / (i + j - 2) * dp[i - 1][j - 2];
}
}
}
return dp[n][m];
}
}
第一题求个思路啊,刚开始我以为是子序列的问题,想了半天还是一团乱麻,现在看到
1000000007就头疼#爱奇艺##题解#