码迷,mamicode.com
首页 > 其他好文 > 详细

hdu5389Zero Escape 01背包

时间:2015-08-15 14:58:20      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:dp   01背包   

//给组数,将其分为两组,使得左边的所有的数的和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 ;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

hdu5389Zero Escape 01背包

标签:dp   01背包   

原文地址:http://blog.csdn.net/cq_pf/article/details/47681755

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!