hdu5389

关于这道题,因该算是通过推理找规律吧,想明白,就很简单了。(今天中午吃的卤肉饭+番茄酱+方便面+酸奶,一顿吃够一天的,其实喜欢番茄酱不喜欢西红柿还是可以理解的吧?)

2015.8.29:

以前总感觉找规律找出来的解题方法很悬,应该有更好的推理出来的方法,但是后来发现在acm中,完全没有那种解百题的方法,很多时候就是找规律,其实数学中的定理不也是找规律在证明吗?所以要大胆的去找,找出来能证明,说不定还能有一个以我命名的定理偷笑

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define N 100010
#define MOD 258280327

int num[N];
long long int dp[N][10];

int main(){
    int t;
    int n;
    int a,b;
    int sum;

    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d",&n,&a,&b);
        sum=0;
        for(int i=1;i<=n;i++){
            scanf("%d",&num[i]);
            sum+=num[i];
        }

        if(sum==0){
            printf("0\n");
        }
        else if((a+b)%9!=sum%9||a+b>sum){
            if(a%9==sum%9||b%9==sum%9){
                printf("1\n");
            }
            else{
                printf("0\n");
            }
        }
        else{
            memset(dp,0,sizeof(dp));
            dp[0][0]=1;
            for(int i=0;i<n;i++){
                for(int j=0;j<=8;j++){
                    int tempnum=(j+num[i+1])%9;
                    dp[i+1][tempnum]=(dp[i+1][tempnum]+dp[i][j])%MOD;
                    dp[i+1][j]=(dp[i+1][j]+dp[i][j])%MOD;
                }
            }

            printf("%d\n",dp[n][a%9]);
        }
    }

    return 0;
}


posted @ 2015-08-14 14:16  buzhidaohahaha  阅读(193)  评论(0编辑  收藏  举报