给你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; }