| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
既然AC了,就贴下代码 吧。。Source Code
Problem: 3529 User: JiaJunpeng
Memory: 388K Time: 16MS
Language: C++ Result: Accepted
Source Code
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stdio.h>
using namespace std;
int a[21][21],b[21][21],c[40][40],m,n,t,coef[21][21][41],f[41][41],g[41][41][41];
int mod=1000000007;
long long x,y;
void gcd(int a,int b)
{
long long temp;
if(b==0)
{
x=1;
y=0;
return;
}
gcd(b,a%b);
temp=x;
x=y;
y=(long long)temp-(long long)(a/b)*(long long)y;
}
int main()
{
int i,j,ans,s,p,q,it,jt,kt,flag;
scanf("%d%d%d",&m,&n,&t);
for(i=0;i<=m+n;i++)
for(j=0;j<=m+n;j++)
{
if(j==0||j==i)
c[i][j]=1;
else
c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
}
memset(f,0,sizeof(f));
f[0][1]=1;
f[0][0]=-1;
for(i=1;i<m+n;i++)
{
f[i][i+1]=1;
for(j=i;j>=0;j--)
{
flag=1;
for(s=i-1;s>=0;s--)
{
f[i][j]+=((long long)c[i+1][i+1-s]*(long long)flag*(long long)f[s][j])%mod;
f[i][j]%=mod;
if(f[i][j]<0)
f[i][j]+=mod;
flag*=-1;
}
}
f[i][0]=(f[i][0]-1)%mod;
if(f[i][0]<0)
f[i][0]+=mod;
for(j=i+1;j>=0;j--)
{
gcd(i+1,mod);
f[i][j]=((long long)f[i][j]*(long long)x)%mod;
if(f[i][j]<0)
f[i][j]+=mod;
}
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&b[i][j]);
it=m;
jt=n;
for(i=0;i<=it;i++)
for(j=0;j<=jt;j++)
for(s=0;s<i+j;s++)
coef[i][j][s]=0;
for(i=0;i<=it;i++)
for(j=0;j<=jt;j++)
for(s=0;s<=it+jt;s++)
g[i][j][s]=0;
for(i=1;i<=it;i++)
for(j=1;j<=jt;j++)
{
for(p=1;p<i;p++)
for(q=0;q<p+j;q++)
{
coef[i][j][q]+=g[p][j][q];
coef[i][j][q]%=mod;
}
for(q=1;q<j;q++)
for(p=0;p<i+q;p++)
{
coef[i][j][p]+=g[i][q][p];
coef[i][j][p]%=mod;
}
coef[i][j][0]+=b[i][j];
coef[i][j][0]%=mod;
for(s=0;s<=i+j-2;s++)
{
int value=((long long)a[i][j]*(long long)coef[i][j][s])%mod;
for(p=0;p<=s+1;p++)
{
g[i][j][p]+=((long long)value*(long long)f[s][p])%mod;
g[i][j][p]%=mod;
}
}
}
while(t--)
{
scanf("%d%d%d",&it,&jt,&kt);
ans=0;
for(i=it+jt-2;i>=0;i--)
{
int value=((long long)kt*(long long)ans)%mod;
ans=(value+coef[it][jt][i])%mod;
}
printf("%d\n",ans);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator