数学苦手……一通推,无法可行……
于是只能想没有办法的办法:打表……
1 #include <cstdio>
2 #include <algorithm>
3
4 using namespace std;
5 typedef long long Long;
6
7 int arr[20];
8 Long ans = 0;
9 int n;
10
11 void dfs(int now,int sum) {
12 if (sum < 0) return;
13 if (now == n) {ans ++; return;}
14 dfs (now + 1, sum + (1 << arr[now] ));
15 dfs (now + 1, sum - (1 << arr[now] ));
16 }
17
18 int main() {
19 for (n = 1; n <= 10; n++) {
20 for (int i = 0; i < n; i++) {
21 arr[i] = i;
22 }
23 Long cnt = 0;
24 ans = 0;
25 do {
26 dfs(0,0);
27 cnt ++;
28 } while (next_permutation(arr,arr + n));
29 printf("%lld ",ans);
30 printf("%lld\n",cnt << n);
31 }
32 return 0;
33 }
输出:
1 2
3 8
15 48
105 384
945 3840
10395 46080
135135 645120
2027025 10321920
34459425 185794560
654729075 3715891200
然后大家都懂了……
1 import java.util.*;
2 import java.io.*;
3 import java.math.BigInteger;
4
5
6 class Main {
7
8 BigInteger[] ans1 = new BigInteger [501];
9 BigInteger[] ans2 = new BigInteger [501];
10 final BigInteger TWO = BigInteger.valueOf(2);
11
12 void solve() throws Exception {
13 MyReader in = new MyReader();
14 int nn = in.nextInt();
15 ans1[1] = BigInteger.ONE;
16 ans2[1] = TWO;
17 for (int i = 2; i <= 500; i++) {
18 ans1[i] = ans1[i - 1].multiply(BigInteger.valueOf(i + i - 1));
19 ans2[i] = ans2[i - 1].multiply(BigInteger.valueOf(i)).multiply(TWO);
20 BigInteger gcd = ans1[i].gcd(ans2[i]);
21 ans1[i] = ans1[i].divide(gcd);
22 ans2[i] = ans2[i].divide(gcd);
23 }
24 PrintWriter out = new PrintWriter(System.out);
25 while (nn-- > 0) {
26 int n = in.nextInt();
27 out.print(ans1[n]);
28 out.print("/");
29 out.println(ans2[n]);
30 }
31 out.flush();
32 }
33
34 public static void main(String args[]) throws Exception {
35 new Main().solve();
36 }
37
38 void debug(Objectx) {
39 System.out.println(Arrays.deepToString(x));
40 }
41 }
42
43 class MyReader {
44 BufferedReader br = new BufferedReader (
45 new InputStreamReader (System.in));
46 StringTokenizer in;
47 String next() throws Exception {
48 if (in == null || !in.hasMoreTokens()) {
49 in = new StringTokenizer(br.readLine());
50 }
51 return in.nextToken();
52 }
53 int nextInt() throws Exception {
54 return Integer.parseInt(next());
55 }
56 }