您的位置:首页 > 其它

uva 10036 Divisibility

2016-04-24 17:32 387 查看
给你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
[0] )
printf("Divisible\n");
else
printf("Not divisible\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: