这题很简单,数据范围也不大,可以直接暴力dfs
#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
const int inf=0x3f3f3f3f;
int n,a[N],flag;
void dfs(int sum,int num)
{
if(flag)return;//找到了答案就可以return
if(num==n+1)
{
if(sum==0 or sum==360 or sum%360==0)flag=1;
//要不然是直接抵消掉,要不然是360的整数倍数说明又转到了0点。
return;
}
//左转或者右转
dfs(sum-a[num],num+1);
dfs(sum+a[num],num+1);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
dfs(0,1);
(flag)?cout<<"YES\n":cout<<"NO\n";
}
C++暴力DFS解决整数环问题
这篇文章介绍了如何使用C++中的深度优先搜索(DFS)算法解决一个涉及整数环的问题,判断在一个给定数组中,通过最多一次加或减操作是否能使得数组元素之和为0或360的倍数。
623

被折叠的 条评论
为什么被折叠?



