zoukankan      html  css  js  c++  java
  • papamelon 201. 部分和问题

    地址 https://www.papamelon.com/problem/201

    解答
    使用dfs遍历各个数字选择或者不选择的情况,判断是否能够得到指定的和
    时间复杂度 O(2^n)

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    
    
    using namespace std;
    
    const int N = 50;
    int arr[N];
    int n, k,sum;
    
    
    int dfs(int idx) {
    	if (sum == k) { 
    		return 1; 
    	}
    	if (idx >= n) { return 0; }
    
    	//尝试不选择该数
    	if (1 == dfs(idx + 1)) { return 1; }
    
    	//尝试选择该数
    	sum += arr[idx]; idx++;
    	if (1 == dfs(idx)) { return 1; }
    	idx--; sum -= arr[idx];
    
    	return 0;
    }
    
    
    int main()
    {
    	while (~scanf("%d", &n)) {
    		sum = 0; 
    		for (int i = 0; i < n; i++) { scanf("%d",&arr[i]); }
    		scanf("%d",&k);
    		if (1 == dfs(0)) {
    			printf("Yes\n");
    		}
    		else {
    			printf("No\n");
    		}
    	}
    
    	
    
    	return 0;
    }
    
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    theme-windowAnimationStyle 动画设置
    Perl中的正则表达式
    repo sync下载脚本
    Virtual Box创建共享目录
    ubuntu下安装jdk
    adb logcat 命令
    如何提高上传带宽
    Ubuntu安装dos2unix工具
    Android打Path的方法
    Ubuntu快捷键
  • 原文地址:https://www.cnblogs.com/itdef/p/15543672.html
Copyright © 2011-2022 走看看