题目描述
已知一个一维数组a[1...n](n<25),又已知一整数m。如能使数组a中任意几个元素之和等于m,则输出YES,反之则为NO
输入格式
第一行有两个正整数n和m,其中1<=n<25,1<=m<=100000000
第二行有n个正整数,代表数组a,且数值均在[1,100000]内
输出格式
如能使数组a中任意几个元素之和等于m,则输出YES,反之则为NO
输入样例
5 10
1 3 5 7 9
输出样例
YES
代码展示
位运算~~
#include<bits/stdc++.h>
using namespace std;
const long long MAX_N=1e7+5;
bitset<MAX_N> can;
int main(){
//freopen("/config/workspace/test/test","r",stdin);
int n,m;
scanf("%d %d",&n,&m);
can[0]=true;
for(int i=0;i<n;i++){
int x;
cin>>x;
can |=(can<<x);
}
puts(can[m] ?"YES":"NO");
return 0;
}
//闲叙题外话:那这也太突然了~~