ZOJ 2042 Divisibility(dp模拟)

来源:互联网 发布:诺基亚c3软件下载 编辑:程序博客网 时间:2024/06/04 20:09

题目链接: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");elseprintf("Not divisible\n");if(t)printf("\n");}return 0;}


0 0