P7774
Astatinear · · 题解
题目传送门
思路
背包问题。
我们假设
首先,初始值:
然后,我们来看
两种情况:
一:如果我们选择了
二:如果选择了
注意事项:
一:由于这是完全背包,所以
二:由于所有角度均小于
答案
如果
如果
代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[15],b[15];
int dp[1005];//dp数组
int main()
{
//输入
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>a[i];
for(int i=1;i<=m;++i)
cin>>b[i];
dp[0]=1;//初始值,dp[0]=1
for(int i=1;i<=n;++i)
{
for(int j=0;j<=1000;++j)//由于是完全背包,j枚举大一点
{
//状态转移
if(j>=a[i])
dp[j%360]|=dp[(j-a[i])%360];
dp[j%360]|=dp[(j+a[i])%360];
}
}
for(int i=1;i<=m;++i)
{
//判断输出YES,还是NO
if(dp[b[i]]==1)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}