描述 将整数N分成K个整数的和且每个数大于等于A小于等于B,求有多少种分法 注意:5 0 0 0 和 0 5 0 0被视为一种方法 输入描述 输入只有一行,分别输入N,K,A,B (所有数字均为不大于30的非负整数) 输出描述 输出只有一行,即多少种分法
用例输入 1
5 4 0 5
用例输出 1
6
这道题和分拆数字很像,只需加上对数值的判断即可。
#include <bits/stdc++.h>
using namespace std;
int s[30], n, sum, cnt, m, a, b;
void dfs(int len, int x) {if (len == m + 1) {if (sum == n) {cnt++;}return;}for (int i = x; i <= b; i++) {//边界判断if (sum + i <= n) {s[len] = i;sum += i;dfs(len + 1, i);sum -= i;}}
}
int main() {cin >> n >> m >> a >> b;if (m == 0) {cout << (n == 0 ? 1 : 0) << endl;//当只能被分成0个数字时,只有n也等于0时才有1种分配方法return 0;}dfs(1, a);cout << cnt;return 0;
}