部分和问题算法 代码(C)

题目: 给定整数a1, a2, ..., an, 判断是否可以从中选出若干数, 使它们的和恰好为k.

解法很多, 最简单的解法是使用深度优先搜索, 时间复杂度O(2^n), 不是最优解法.

代码:

/*
 * main.cpp
 *
 *  Created on: 2014.7.13
 *本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include <stdio.h>  

bool dfs (int i, int sum, int* a, int n, int k) {
    if (i==n) return sum == k;
    if(dfs(i+1, sum, a, n, k)) return true;
    if(dfs(i+1, sum+a[i], a, n, k)) return true;
    return false;
}  

void solve(int* a, int n, int k) {
    if (dfs(0,0,a,n,k)) printf("Yes\n");
    else printf("No\n");
}  

int main(void)
{
    const int MAX_N = 20;
    int a[MAX_N] = {1, 2, 4, 7};
    int n = 4, k = 13; //k位需要找到的数字  

    solve(a, n, k);  

    return 0;
}

输出:

Yes

作者:csdn博客 Mystra

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, return
, 代码
, dfs
, sum
解法
贪心算法背包问题代码、旅行商问题算法代码、tsp问题算法源代码、银行家算法c语言代码、sift算法c 源代码,以便于您获取更多的相关知识。

时间: 2025-01-27 13:44:51

部分和问题算法 代码(C)的相关文章

迷宫的最短路径算法 代码(C++)

题目: 给定一个大小为N*M的迷宫. 迷宫由通道和墙壁组成, 每一步可以向邻接的上下左右四格的通道移动. 请求出从起点到终点所需的最小步数. 请注意, 本题假定从起点一定可以移动到终点. 使用宽度优先搜索算法(DFS), 依次遍历迷宫的四个方向, 当有可以走且未走过的方向时, 移动并且步数加一. 时间复杂度取决于迷宫的状态数, O(4*M*N)=O(M*N). 代码: /* * main.cpp * * Created on: 2014.7.17 *本栏目更多精彩内容:http://www.bi

PHP Hash算法:Times33算法代码实例

  这篇文章主要介绍了PHP Hash算法:Times33算法代码实例,本文直接给出实现代码,需要的朋友可以参考下 最近看书,里面提到了一些Hash算法.比较有印象的是Times33,当时理解不是很透测,今天写了段程序来验证了一下. 先上代码: 复制代码 代码如下: /** * CRC32 Hash function * @param $str * @return int */ function hash32($str) { return crc32($str) >> 16 & 0x7

PHP实现的蚂蚁爬杆路径算法代码_php技巧

本文实例讲述了PHP实现的蚂蚁爬杆路径算法代码.分享给大家供大家参考,具体如下: <?php /** * 有一根27厘米的细木杆,在第3厘米.7厘米.11厘米.17厘米.23厘米这五个位置上各有一只蚂蚁. * 木杆很细,不能同时通过一只蚂蚁.开始 时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头, * 但不会后退.当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走.假设蚂蚁们每秒钟可以走一厘米的距离. * 编写程序,求所有蚂蚁都离开木杆 的最小时间和最大时间. */ function ad

matlab-基于功率谱熵的语音端点检测算法代码

问题描述 基于功率谱熵的语音端点检测算法代码 1C 用matlab实现基于功率谱熵的语音端点检测算法,给出能绘制出检测波形图的代码.能有注释就更好了,谢谢啦.

c++-C++求个优化过的A星算法 代码

问题描述 C++求个优化过的A星算法 代码 如果角色可以360度走,要怎么使路径平滑呢???? ??????????????????????????????????? 解决方案 http://blog.itpub.net/8225414/viewspace-951996/ 解决方案二: http://cn.cocos2d-x.org/tutorial/show?id=773

php 常用的排序算法代码[冒泡,递归排序

php 常用的排序算法代码[冒泡,递归排序 冒泡排序算法  function bubblesort($arr) { $n=count($arr); for($i=0;$i<$n;$i++) { for($j=$i;$j<=$n-1;$j++) { if($arr[$i]>$arr[$j]) { $temp=$arr[$i]; $arr[$i]=$arr[$j]; $arr[$j]=$temp; } } } return $arr; }  //直接插入排序   function inser

C++实现大数乘法算法代码_C 语言

C++实现大数乘法算法代码 复制代码 代码如下: //大数乘法算法 #include<iostream> #include<string> #include<cstring> using namespace std; int main() {     string num1,num2;     cin >> num1 >> num2;     //cout << num1.size() << " " &

使用PHP实现二分查找算法代码分享

第一种方法: [二分查找要求]:1.必须采用顺序存储结构 2.必须按关键字大小有序排列. [优缺点]折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表. [算法思想]首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表. 复制代码 代码如下: <?

水洼的数量算法 代码(C)

题目: 有一个大小为N*M的园子, 雨后起了积水. 八连通的积水被认为是连接在一起的. 请求出园子里总共有多少水洼. 使用深度优先搜索(DFS), 在某一处水洼, 从8个方向查找, 直到找到所有连通的积水. 再次指定下一个水洼, 直到没有水洼为止. 则所有的深度优先搜索的次数, 就是水洼数. 时间复杂度O(8*M*N)=O(M*N). 代码: /* * main.cpp * * Created on: 2014.7.12 *本栏目更多精彩内容:http://www.bianceng.cnhttp