您的位置:首页 > 其它

算法训练 数的划分

2018-02-08 21:50 162 查看
问题描述

  将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。

  例如:n=7,k=3,下面三种分法被认为是相同的。

  1,1,5; 1,5,1; 5,1,1;

  问有多少种不同的分法。

输入格式

  n,k

输出格式

  一个整数,即不同的分法

样例输入

7 3

样例输出

4 {四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;}

数据规模和约定

  6<n<=200,2<=k<=6

题目说的是动态规划,但我对动态规划的理解还不够深刻。想出来的算法为每次列举1到k-sum之间的数凑n,代码如下

import java.util.Scanner;

public class Main {
static int K;
static int N;
static int SUM = 0;

public static void dfs(int n, int index, int sum) {
if (index == K) {
if (sum == N) {
SUM++;
}
return;
}
for (int i = n; i <= N - sum; i++) {
if (sum + i <= N) {
dfs(i, index + 1, sum + i);
}

}

}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
N = scanner.nextInt();
K = scanner.nextInt();
dfs(1, 0, 0);
System.out.println(SUM);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: