题目链接:http://codeforces.com/contest/1097/problem/B
题意是给了n个数,然后使这些数任意加减,能否最终变成0
因为数据量不大,可以用dfs去暴力,也可以用二进制枚举2^15的复杂度也可以写...
AC代码(二进制枚举):
#include <bits/stdc++.h>
using namespace std;
int n;
int pre[25];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&pre[i]);
}
bool flag = false;
for(int i=0;i<(1<<n);i++){
int ans = 0;
for(int j=0;j<n;j++){
if(i & (1 << j)){
ans += pre[j];
}
else ans -= pre[j];
}
if(ans % 360 == 0){
flag = true;
break;
}
}
if(flag)puts("YES");
else puts("NO");
return 0;
}
AC代码(dfs):
#include <bits/stdc++.h>
#define maxn 25
using namespace std;
int n;
int pre[maxn];
bool flag;
void dfs(int x,int sum){
if(x == n){
if(sum % 360 == 0){
flag = true;
}
return ;
}
dfs(x + 1, sum + pre[x]);
dfs(x + 1, sum - pre[x]);
}
int main()
{
int a = 0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&pre[i]);
}
flag = false;
dfs(0, 0);
if(flag) puts("YES");
else puts("NO");
return 0;
}