给你N个数,在N个数中加入加号或减号,判断能否组成整除K的组合
博主为朱老师的学生
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
int num[10010];
int dp[10010][110];
int main()
{
int M,N,K;
while ( ~scanf("%d",&M))
while ( M -- )
{
memset( dp, 0, sizeof(dp) );
scanf("%d%d",&N,&K);
for ( int i = 0 ; i < N ; ++ i )
scanf("%d",&num[i]);
for ( int i = 0 ; i < N ; ++ i )
num[i] = abs(num[i])%K;
dp[0][0] = 1;
for ( int i = 0 ; i < N ; ++ i )
for ( int j = 0 ; j < K ; ++ j )
if ( dp[i][j] )
{
dp[i+1][(j+K+num[i])%K] = 1;
dp[i+1][(j+K-num[i])%K] = 1;
}
if ( dp[N][0] )
printf("Divisible\n");
else
printf("Not divisible\n");
}
return 0;
}