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; }