(step4.3.4)hdu 1258(Sum It Up——DFS)
来源:互联网 发布:网络电影分账截图 编辑:程序博客网 时间:2024/06/06 03:50
题目大意:输入t,n,接下来有n个数组成的一个序列。输出总和为t的子序列
解题思路:DFS
代码如下(有详细的注释):
#include <iostream>#include <algorithm>using namespace std;/** * t: 指定的和 * n: 给出的数的个数 * sign : 用来标记是否有解 * index :结果序列中元素的个数 * a[] :用来存储给出的数 * save[] :用来保存结果序列 * */int t, n;int a[20];int save[20];int index;int sign;//降序排列int cmp(const int &a, const int& b) {return a > b;}void dfs(int k, int sum) {//如果当前搜索到的和>指定和if (sum > t) {return;}//如果当前搜索到的和 == 指定和if (sum == t) {sign = 1; //将sign标记为1,表示有解for (int i = 0; i < index - 1; i++) {cout << save[i] << "+";}cout << save[index - 1] << endl;return;}//遍历状态int last = -1;for (int i = k + 1; i <= n; i++) {if (a[i] != last) { //当前的数不能跟上一次搜索的起点的数值一样,不然会造成重复save[index++] = a[i];//将a[i]放进结果序列中last = a[i]; //last保存当前搜索的起点dfs(i, sum + a[i]);index--;}}}int main() {int i;while (cin >> t >> n, t + n) {index = 0;sign = 0;for (i = 1; i <= n; i++) {cin >> a[i];}sort(a + 1, a + n + 1, cmp); //降序排序printf("Sums of %d:\n", t);dfs(0, 0);if (!sign) {cout << "NONE" << endl;}}return 0;}
- (step4.3.4)hdu 1258(Sum It Up——DFS)
- hdu 1258 Sum It Up(DFS)
- hdu 1258 Sum It Up(dfs)
- hdu 1258 Sum It Up(dfs)
- hdu 1258 Sum It Up dfs
- HDU 1258 Sum It Up DFS
- HDU 1258 Sum it up 搜索DFS
- HDU--1258:Sum It Up (DFS)
- hdu 1258 Sum It Up (dfs)
- hdu 1258 Sum It Up(dfs)
- HDU 1258 Sum It Up (DFS)
- HDU 1258 Sum It Up (还是DFS)
- HDU 1258 Sum It Up(DFS)
- hdu 1258 Sum it up dfs+剪枝
- HDOJ(HDU).1258 Sum It Up (DFS)
- hdu 1258 Sum It Up dfs暴搜
- HDU 1258 (DFS) Sum It Up
- HDU 1258 Sum It Up(DFS)
- 指针常量和常量指针
- linux下如何查看某个软件 是否安装??? 安装路径在哪???
- C++中引用传递与指针传递区别
- 数据库的基本概念
- Android中基本组件的复习
- (step4.3.4)hdu 1258(Sum It Up——DFS)
- 二叉树后序遍历(非递归)
- 二叉树的非递归遍历
- 视图生命周期与视图控制器关系
- POJ 1011 木棍问题
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 机器学习理论与实战(十三)概率图模型01
- hdu1863 kruskal(最小生成树)
- 考虑不确定性和风险的工具和技术有