UVALive 6661 解题心得
2015-08-02 19:27
471 查看
原题:
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4673
题目大意:
求从不超过 N 的正整数当中选取 K 个不同的数字,组成和为 S 的方法数。
1 <= N <= 20 1 <= K<= 10 1 <= S <= 155
找好约束条件和结束条件就可以使用dfs轻松做出来
约束条件:cur_sum+i == sum&&dep==k
结束条件:cur_sum == sum,
我的代码:
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4673
题目大意:
求从不超过 N 的正整数当中选取 K 个不同的数字,组成和为 S 的方法数。
1 <= N <= 20 1 <= K<= 10 1 <= S <= 155
找好约束条件和结束条件就可以使用dfs轻松做出来
约束条件:cur_sum+i == sum&&dep==k
结束条件:cur_sum == sum,
我的代码:
#include<iostream> #include<cstdio> using namespace std; int n, k, sum; int cnt = 0; int depth=0; void dfs(int dep, int cur_num, int cur_sum) { //depth++; if (cur_sum == sum) return; for (int i = cur_num; i <= n; i++) { if (cur_sum+i>sum) return; if (cur_sum+i == sum&&dep==k) { cnt++; return; } dfs(dep + 1, i + 1, cur_sum + i); } } int main() { while (cin >> n >> k >> sum&&n != 0) { depth = 0; cnt = 0; dfs(1, 1, 0); cout << cnt << endl; } return 0; }
相关文章推荐
- Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现
- L-BFGS算法(有限内存BFGS算法)
- Java虚拟机参数设置
- Linux中rmdir和rm
- 双向链表的实现---数据结构学习(三)
- 黑马程序员---iOS基础---Foundation框架
- 企业文化
- POJ2456 Aggressive cows(对整数二分)
- HDU 5224 解题心得
- CodeForces 556A 解题心得
- Activity的launchMode和任务栈小结
- 延时提示框
- 掌上快递之主界面篇(1)
- setsockopt函数和getsockopt函数
- hdu 5328 Problem Killer
- shell小技巧--用“$$”和"$0"防止同一个脚本启动多次
- 掌上快递之主界面篇(1)
- HDU 2524 矩形A + B 解题心得
- python reportlab 生成pdf (二) SimpleDocTemplate
- POJ1064 Cable master(小数二分)