zoukankan      html  css  js  c++  java
  • c++ 组合

    组合

    题目描述

    已知一个一维数组a1..n,又已知一整数m。 如能使数组a中任意几个元素之和等于m,则输出YES,反之则为NO。

    输入

    输入包括两行,第一行包含两个整数n m(1<=n<20,1<=m<=1000000),第二行输入n个整数(每个数不会超过1000000)。

    输出

    如能使数组a中任意几个元素之和等于m,则输出YES,反之则为NO。

    样例输入

    6 5
    2 3 1 4 2 1
    

    样例输出

    YES
    

    提示

    (None)

    代码+注释

    #include <bits/stdc++.h>
    using namespace std;
     
    int nums[101];
    int n;	//数组元素个数
    int m;	//数组中存在n个元素和为m
    bool flag;
     
    void sum(int n,int m)   //求数组中是否存在一些元素和等于m
    {
    	if(nums[n] == m) flag = true;  //假设数组的最后一个元素等于和m,将flag变量置为true
    	else if(n == 1) return ;    //搜索完了整个数组返回
    	else
    	{
    		sum(n - 1,m - nums[n]);   //说明取了nums[n]元素
    		sum(n - 1,m);	//说明没有取nums[n] 
    	} 
    } 
     
    int main()
    {
    	cin >> n;
    	for(int i = 1;i <= n;i ++)
    	{
    		cin >> nums[i]; 
    	}
    	cin >> m;
    	flag = false; //初始时,将flag置为false,当找到某些元素和为m的时候在sum函数中flag的值将改变
    	sum(n,m);
    	if(flag)
    	cout << "Yes" << endl;
    	else
    	cout << "No" << endl;
    	return 0;
    }
    
    
  • 相关阅读:
    【洛谷p1309】瑞士轮
    【洛谷p1190】接水问题
    KMP算法小记
    【洛谷p1051】谁拿了最多奖学金
    【洛谷p1781】宇宙总统
    【6.12校内test】T2 子集
    【6.12校内test】T3 城市交通费
    【6.12校内test】T1单词序列
    【洛谷p1464】 Function
    IOS基础之 (十二) 类的扩展
  • 原文地址:https://www.cnblogs.com/LJA001162/p/11032241.html
Copyright © 2011-2022 走看看