记录编号 | 259576 | 评测结果 | AAAAAAAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 牛跳房子 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 4.042 s | ||
提交时间 | 2016-05-10 11:57:53 | 内存使用 | 6.92 MiB | ||
#include<cstdio> #include<iostream> using namespace std; const int SIZEN=760,MOD=1000000007; int N,M,K; int co[SIZEN][SIZEN]; int F[SIZEN][SIZEN]={0}; int sum[SIZEN*SIZEN]={0}; void read() { scanf("%d%d%d",&N,&M,&K); for(int i=1;i<=N;i++) { for(int j=1;j<=M;j++) scanf("%d",&co[i][j]); } } int all=0; void solve(int l,int r) { if(l==r) return; //cout<<l<<" "<<r<<endl; int mid=(l+r)/2; solve(l,mid); all=0; for(int i=1;i<=N;i++) { for(int j=mid+1;j<=r;j++) { F[i][j]=(((F[i][j]+all-sum[co[i][j]])%MOD)+MOD)%MOD; } for(int j=l;j<=mid;j++) { sum[co[i][j]]=(sum[co[i][j]]+F[i][j])%MOD; all=(all+F[i][j])%MOD; } } for(int i=1;i<=N;i++) for(int j=l;j<=mid;j++) sum[co[i][j]]=0; solve(mid+1,r); } void work() { F[1][1]=1; solve(1,M); printf("%d\n",F[N][M]); } int main() { freopen("hopscotch.in","r",stdin); freopen("hopscotch.out","w",stdout); read(); work(); return 0; }