#include  < stdio.h >
#include 
< stdlib.h >
#include 
< string .h >

int   n, k;
int   d[ 10001 ];
bool  result[ 10001 ][ 101 ];

int  main()
{
    
while ( scanf( " %d%d " , & n, & k) !=  EOF )
    
{
        
for  (  int  i =   1 ; i <=  n;  ++ i ) scanf( " %d " & d[i] );
        
        memset( result, 
false sizeof (result) );
       
        
int  t =  d[ 1 ] >   0 ?  ( d[ 1 ] %  k ): ( (k -  (  - d[ 1 ] %  k) ) % k ); 
        result[
1 ][t] =   true ;  
            
        
for  (  int  i =   2 ; i <=  n;  ++ i )
        
{
            
int  t1 =  ( d[i] >   0  ) ? (d[i] % k):( - d[i] % k);
            
int  t2 =  (k -  t1) %  k;
            
            
for  (  int  j =   0 ; j <   101 ++ j )
                
if  ( result[i - 1 ][j] ) 
                
{
                    result[i][ (j
+  t1) %  k ] =   true ;
                    result[i][ (j
+  t2) %  k ] =   true ;
                }
     
         }

         
         
if  ( result[n][ 0 ] ) printf( " Divisible\n " );
         
else                 printf( " Not divisible\n " );    
    }

    
    
return   0 ;
}
        
posted on 2008-10-09 12:37 Darren 阅读(338) 评论(0)  编辑 收藏 引用 所属分类: 动态规划

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理