题目大意:
一个人可以用+或-操作一组数字。判断操作之后数字可以被K整除
输入:N和K,以及N个数字
解题思路:
动态规划问题
代码如下:
#include<stdio.h>
#include<string.h>
int m,n;
int Opt[10010][110];
int Int[10010];
int DP()
{
int i,j,s;
memset(Opt,0,sizeof(Opt));
Opt[1][Int[1]]=1;
for(i=1;i<n;i++)
{
for(j=0;j<=m;j++)
{
if(Opt[i][j])
{
s=j+Int[i+1];
s%=m;
Opt[i+1][s]=1;
s=j-Int[i+1];
while(s<0) s+=m;
Opt[i+1][s]=1;
}
}
}
if(Opt[n][0]) return 1;
return 0;
}
int main()
{
int Kase,i;
scanf("%d",&Kase);
while(Kase--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&Int[i]);
Int[i]%=m;
while(Int[i]<0) Int[i]+=m;
}
if(DP()) printf("Divisible\n");
else printf("Not divisible\n");
if(Kase) printf("\n");
}
return 0;
}