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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM