标签:
题目链接:http://vjudge.net/problem/viewProblem.action?id=49406
思路:
题意:根据给出的n,k,s求出n个数每个数都不大于k,和为s的序列(n个数每个都不同)的总情况数。
思路:
利用dfs递归。
代码:
#include<cmath> #include<cstdio> #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n, k, s; int cnt = 0; void dfs(int sum, int x, int depth) { if (sum > s) return ; if (k - 1 == depth) { if (sum == s) cnt++; return ; } for (int i = x + 1; i <= min(n, s - sum); i++) dfs(sum + i, i, depth + 1); } int main () { while(scanf("%d%d%d", &n, &k, &s)) { if (n + k + s == 0) break; cnt = 0; for (int i = 1; i <= n; i++) { dfs(i, i, 0); } printf("%d\n", cnt); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a1967919189/article/details/47175391