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

浙公网安备 33010602011771号