题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2042
题意:在给出的n个数中填入+或-,使得该式子运算后的结果%k是否为0,如果是则输出Divisible,不是则输出Not divisible
AC代码:
#include <stdio.h>
#include <string.h>
int dp[10010][110],a[10010],n,k,i,j,t;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&k);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
a[i]%=k;
if(a[i]<0)
a[i]=(a[i]+k)%k;
}
memset(dp,0,sizeof(dp));
dp[0][a[0]]=1;
for(i=1;i<n;i++){
for(j=0;j<k;j++){
if(dp[i-1][j])
dp[i][(j+a[i]+k)%k]=dp[i][(j-a[i]+k)%k]=1;
}
}
if(dp[n-1][0])
printf("Divisible\n");
else
printf("Not divisible\n");
if(t)
printf("\n");
}
return 0;
}