가방

2432 단어 dp가방
//   ,      ,           mod9 a,   b
//    
//01  ,dp[i][j] , i     mod9 j   
//dp[i][j] = (dp[i-1][(j+9-tmp)%9] + dp[i-1][j])%mod ;
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 1e5+10 ;
const int mod = 258280327 ;
int dp[maxn][10] ;
int n , a , b ;
int main()
{
 //freopen("in.txt" ,"r" , stdin) ;
 int t ;
 scanf("%d" , &t) ;
 while(t--)
 {
 scanf("%d%d%d" , &n , &a , &b) ;
 for(int i = 0;i <= n;i++)
 memset(dp[i] , 0 , sizeof(dp[i])) ;
 int sum = 0 ;dp[0][0] = 1;
 for(int i = 1;i <= n;i++)
 {
 int tmp ;
 scanf("%d" , &tmp) ;
 sum += tmp ;
 for(int j = 0 ;j < 9 ;j++)
 dp[i][j] = (dp[i-1][(j+9-tmp)%9] + dp[i-1][j])%mod ;
 }
 if(((sum-a-b)%9) && ((sum-a)%9) && ((sum-b)%9))
 {
 puts("0") ;
 continue ;
 }
 else if((sum-a-b)%9)
 {
 puts("1");
 continue ;
 }
 else cout<<dp[n][a%9]<<endl;
 }
 return 0 ;
}

좋은 웹페이지 즐겨찾기