输入包括两个整数n 和 m(1 ≤ n, m ≤ 50)
输出一个实数,表示需要时间的期望值,四舍五入保留一位小数。
2 1
1.5
/****这个题完全就是数学题了吧。。。*/importjava.util.Scanner;publicclassMain {publicstaticvoidmain(String[] args) {Scanner scanner = newScanner(System.in);while(scanner.hasNext()) {intn = scanner.nextInt();intm = scanner.nextInt();float[] dp = newfloat[m + 1];if(m == 0) {System.out.println(0);return;}if(m == 1) {floatres = (n + 1) / 2.0f; //和下面的不同,此处已知m=1String r = String.format("%.1f", res);System.out.println(r);return;}dp[1] = (n+ m) / 2.0f; //注意此处for(inti = 2; i <= m; i++) {dp[i] = p1(m + n-i, i) + p2(m + n -i, i) * (dp[i-1] + 1) + p3(m + n -i, i) * (dp[i-2] + 1);}String r = String.format("%.1f", dp[m]);System.out.println(r);}}privatestaticfloatp1(intn, intm) {intc1 = n * (n-1) / 2;ints = (n + m) * (n + m -1) / 2;floatres = c1 * 1.0f / (s - c1);returnres;}privatestaticfloatp2(intn, intm) {intc1 = n * (n-1) / 2;intc2 = n * m;ints = (n + m) * (n + m -1) / 2;floatres = c2 * 1.0f / (s - c1);returnres;}privatestaticfloatp3(intn, intm) {intc1 = n * (n-1) / 2;intc3 = m * (m -1) / 2;ints = (n + m) * (n + m -1) / 2;floatres = c3 * 1.0f / (s - c1);returnres;}}