1. 题目描述
给定一个整数n,将其无序拆分成最大数为k的拆分数,(n,k不超出100) 要求:所有的拆分方案不重复。
如当n=4,k=4时,一共有5种拆分方案,拆分如下:
(1)4=1+1+1+1
(2)4=1+1+2
(3)4=1+3
(4)4=2+2
(5)4=4
2. 输入格式:
每一行输入一组整数n,k,遇到键盘结束符^Z或文件结束符EOF时结束输入。
3. 输出格式:
按行输出每组的拆分方案数。
4. 输入样例:
4,4
5,4
5. 输出样例:
5
6
import java.util.Scanner;
public class Main {
static int dp[][] = new int[101][101];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
String sn = str.substring(0, str.indexOf(","));
String sk = str.substring(str.indexOf(",") + 1);
int n = Integer.parseInt(sn);
int k = Integer.parseInt(sk);
System.out.println(Split(n, k));
}
}
private static int Split(int n, int k) {
if (dp[n][k] != 0)
return dp[n][k];
if (n == 1 || k == 1) {
dp[n][k] = 1;
return dp[n][k];
} else if (n < k) {
dp[n][k] = Split(n, n);
return dp[n][k];
} else if (n == k) {
dp[n][k] = 1 + Split(n, k - 1);
return dp[n][k];
} else {
dp[n][k] = Split(n, k - 1) + Split(n - k, k);
return dp[n][k];
}
}
}
本文介绍了一种解决整数无序拆分问题的算法,该算法通过动态规划方法求解给定整数n的最大数为k的所有不重复拆分方案数量。提供了完整的Java代码实现,包括输入输出示例。
2301

被折叠的 条评论
为什么被折叠?



