题意:一串随机的数列,要求判断是否存在一种在数列中添加加减号的方式使得最后的结果能够被k整除
思路:dp
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
bool dp[2][105];
int main(){
// freopen("data.txt","r",stdin);
int n,k;
scanf("%d%d",&n,&k);
memset(dp,0,sizeof(dp));
dp[1][0]=1;
for(int i=0;i<n;++i)
{
int a;
scanf("%d",&a);
int now=i&1;
memset(dp[now],0,sizeof(dp[now]));
for(int j=0;j<=k;++j)
{
if(dp[!now][j])
{
dp[now][((j-a)%k+k)%k]=1;
dp[now][((j+a)%k+k)%k]=1;
}
}
}
if(dp[(n-1)&1][0])printf("Divisible\n");
else printf("Not divisible\n");
return 0;
}