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

    //-------------部分和问题-----------
    //给定整数a1,a2, ,,,an,判断是否可以从中选出若干数, 使他们的和恰好为k
    //  其中n范围为【1,20】
    //算法分析:从a1开始按顺序决定每个数加或不加,在全部n个数都决定后再判断他们的和是不是k即可、 
    
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    int n, k;
    int a[22];
    
    bool dfs(int i, int sum) {
    	if (i == n)
    		return sum == k;		//如果前n项都计算过了,则返回sun是否与k相等 
    	if (dfs(i+1, sum))			//不加上a【i】的情况 
    		return true;
    	if (dfs(i+1, sum+a[i]))		//加上a【i】的情况 
    		return true;
    	return false;				//无论是否加上a【i】都不能凑成sum则返回false 
    }
    
    int main() {
    	memset(a, 0, sizeof(a));
    	cin >>n >> k;
    	for (int i=0; i<n; i++)
    		cin >> a[i];
    	if (dfs(0, 0))
    		cout << "YES"<< endl;
    	else
    		cout << "NO"<< endl;
    		
    	return 0;
    }

  • 相关阅读:
    第五章 Internet协议
    第四章 地址解析协议
    Learn the shell
    Linux学习前的准备
    第三章 链路层
    第二章 Internet 地址结构
    后台数据导出为Excel
    C#开发客户端、JAVA和tomcat开发服务端
    Java基础
    C++学习笔记--(1)
  • 原文地址:https://www.cnblogs.com/Tovi/p/6194846.html
Copyright © 2011-2022 走看看