K12教育赛事综合服务平台
聚乐之家官方网站
下载聚乐之家官方App
专注青少年竞赛题库网站
整数拆分指将正整数分解为若干正整数的和,不计顺序且允许重复使用数字。例如正整数4的拆分方案共有5种:1+1+1+1、1+1+2、1+3、2+2、4。
int countSplit(int n) { int dp[5][5] = {0}; // 边界条件初始化 for(int j = 0; j <= n; j++) dp[0][j] = 1; for(int i = 1; i <= n; i++) dp[i][0] = 0; // 动态规划递推 for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(j > i) dp[i][j] = dp[i][i]; else dp[i][j] = dp[i][j-1] + dp[i-j][j]; } } return dp[n][n]; }
int countSplit(int n) { int dp[5][5] = {0}; // 错误的边界初始化 for(int j = 0; j <= n; j++) dp[0][j] = 0; for(int i = 1; i <= n; i++) dp[i][0] = 0; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(j > i) dp[i][j] = dp[i][i]; else dp[i][j] = dp[i][j-1] + dp[i-j][j]; } } return dp[n][n]; }
int countSplit(int n) { int dp[5] = {0}; dp[0] = 1; // 有序拆分的递推逻辑 for(int i = 1; i <= n; i++) { for(int j = 1; j <= i; j++) { dp[i] += dp[i-j]; } } return dp[n]; }
int countSplit(int n) { int dp[5][5] = {0}; for(int j = 0; j <= n; j++) dp[0][j] = 1; for(int i = 1; i <= n; i++) dp[i][0] = 0; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(j > i) dp[i][j] = dp[i][i]; else dp[i][j] = dp[i][j-1] + dp[i-j][j-1]; } } return dp[n][n]; }