解题思路:
注意事项:
参考代码:
import java.util.*; public class Main { public static void main(String[] args) { Scanner sr = new Scanner(System.in); int n = sr.nextInt(); int[][] dp = new int[n + 1][n + 1]; countPaths(n, 1, dp); System.out.println(dp[n][1]+1); } static int countPaths(int a, int b, int[][] dp) { if (dp[a][b] != 0) { return dp[a][b]; // 如果已经计算过,直接返回结果 } if (a / 2 < b) { return 0; // 不满足条件,返回0 } int count = 1; // 至少有一个数(当前数) count += countPaths(a, b + 1, dp); // 递归调用1 count += countPaths(b, 1, dp); // 递归调用2 dp[a][b] = count; // 存储结果 return count; } }
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:624 |
A+B for Input-Output Practice (III) (C语言代码)浏览:576 |
哥德巴赫曾猜测 (C语言代码)浏览:2348 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:569 |
蚂蚁感冒 (C语言代码)浏览:773 |
C二级辅导-公约公倍 (C语言代码)浏览:483 |
妹子杀手的故事 (C语言代码)浏览:1054 |
简单的a+b (C语言代码)浏览:630 |
拆分位数 (C语言代码)浏览:522 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:521 |