中文题,不解释
http://acm.hdu.edu.cn/showproblem.php?pid=4558
#include<stdio.h>
#include<iostream>
using namespace std;
int dp0[480][480][11]={0},dp1[480][480][11]={0};
int a[480][480]={0};
int main()
{
int t;
int i,j,k,r;
int m,n,s;
char b[500];
while(scanf("%d",&t)!=EOF)
{
for(i=1;i<=t;i++)
{
s=0;
scanf("%d%d",&n,&m);
for(j=1;j<=n;j++)
{
scanf("%s",b);
for(k=1;k<=m;k++)
{
a[j][k]=b[k-1]-'0';
}
}
memset(dp0,0,sizeof(dp0));
memset(dp1,0,sizeof(dp1));
for(j=1;j<=n;j++)
for(k=1;k<=m;k++)
{
dp0[j][k][a[j][k]]=1;
for(r=0;r<=10;r++)
{
dp0[j][k][r]+=(dp1[j-1][k][(r-a[j][k]+11)%11]+dp1[j][k-1][(r-a[j][k]+11)%11])%1000000007;
dp1[j][k][r]+=(dp0[j-1][k][(r+a[j][k])%11]+dp0[j][k-1][(r+a[j][k])%11])%1000000007;
if(r==0)
{
s+=(dp0[j][k][r]%1000000007+dp1[j][k][r]%1000000007)%1000000007;
}
s=s%1000000007;
}
}
printf("Case %d: %d\n",i,s);
}
}
return 0;
}