// 感觉dp可以过,没有考虑取模的情况 int[] dp = new int[n / 2 + 1];         dp[1] = 1;         dp[2] = 2;         dp[3] = 5;         // 计算每个dp的值         for (int j = 4; j <= n / 2; j++) {             int sum = 0;             // 将12 14 ... 1n/2的组合数累加起来             for (int i = 2; i <= j; i += 2) {                 if (i > 4 && i < j * 2 - 2) {                     // 如果可以分为两部分:取两部分组合数的乘积×2                     sum += 2 * dp[(i - 2) / 2] * dp[(j * 2 - i) / 2];                 } else {                     // 只能分成一部分                     sum += 2 * dp[(j * 2 - i) / 2];                 }                 // System.out.println("j:" + j + " i:" + i + " sum:" + sum);             }             // j为奇数的情况,只用加一次             if (j % 2 == 1)                 sum += dp[(j - 1) / 2] * dp[(j - 1) / 2];             dp[j] = sum;         }
点赞 评论

相关推荐

点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务