1 条题解
-
0
C :
#include <stdio.h> #include <stdlib.h> #define NUM 100 // 要拆解的数字 #define DEBUG 0 int main(void) { int table[NUM][NUM/2+1] = {0}; // 动态规画表格 int count = 0; int result = 0; int i, j, k,n; scanf("%d",&n); // 初始化 for(i = 0; i < n; i++) { table[i][0] = 1; // 任何数以0以下的数拆解必只有1种 table[i][1] = 1; // 任何数以1以下的数拆解必只有1种 table[i][2] = 1; } // 动态规划 for(i = 2; i <= n; i++) { for(j = 2; j <= i; j++) { if(i + j > n) // 大于 n continue; count = 0; for(k = 1 ;k <= j; k++) { count += table[i-k][(i-k >= k) ? k : i-k]; } table[i][j] = count; } } // 计算并显示结果 for(k = 1 ;k <= n; k++) result += table[n-k][(n-k >= k) ? k : n-k]; printf("%d\n", result); if(DEBUG) { printf("\n除错资讯\n"); for(i = 0; i < n; i++) { for(j = 0; j < n/2+1; j++) printf("%2d", table[i][j]); printf("\n"); } } return 0; }
C++ :
#include <cstdio> int split(int n, int m) { if(n==1||m==1) return 1; if(n<=m) return 1+split(n, n-1); return split(n-m, m)+split(n, m-1); } int main(void) { int n, m; scanf("%d", &n); printf("%d\n", split(n, n)); return 0; }
- 1
信息
- ID
- 481
- 时间
- 1000ms
- 内存
- 2MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者