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

int   mid =   5000 ;
int   result[ 21 ][ 10000 ];
int   C,G;
int   pos[ 21 ];
int   value[ 21 ];

int  main()
{
    
while ( scanf( " %d%d " , & C, & G) !=  EOF )
    
{
        
for  (  int  i =   1 ; i <=  C;  ++ i )  scanf( " %d " & pos[i] );
        
for  (  int  i =   1 ; i <=  G;  ++ i )  scanf( " %d " & value[i] );
        
        memset( result, 
0 sizeof (result ) );
        
        
for  (  int  i =   1 ; i <=  C;  ++ i )
        result[
1 ][ mid +  pos[i] *  value[ 1 ] ] ++ ;
        
        
for  (  int  i =   2 ; i <=  G;  ++ i )
            
for  (  int  j =   1 ; j <=  C;  ++ j )
                
for  (  int  k =   0 ; k <   10000 ++ k )
                   
if  ( result[i - 1 ][k] >   0  )
                   result[i][ k
+  value[i] *  pos[j] ] +=  result[ i - 1  ][k];
        
        printf(
" %d\n " , result[G][mid] );
    }
    
    
    
return   0 ;
}
    
posted on 2008-10-09 11:14 Darren 阅读(339) 评论(0)  编辑 收藏 引用 所属分类: 动态规划

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