洛谷p1373

来源:互联网 发布:linux c指定位置输出 编辑:程序博客网 时间:2024/05/16 12:36

原题:http://www.luogu.org/problem/show?pid=1373#


重要:当输入数据较大时,一定要用scanf!!!!!


注意: k++ 是重点


#include<iostream>
#include<cstdio>
using namespace std;
int dp[805][805][16][2];
int a[805][805];
const int mo=1e9+7;
int n,m,k,ans;
int main()
{
    cin>>n>>m>>k;
    k++;
    for (int i=1;i<=n;i++)
    for (int j=1;j<=m;j++)
    {
        scanf("%d",&a[i][j]);
        a[i][j]%=k;
        dp[i][j][a[i][j]][0]=1;
    }

    for (int i=1;i<=n;i++)
    for (int j=1;j<=m;j++)
    for (int p=0;p<k;p++)
    {
        int o=a[i][j];
        int a1,a2,a3,a4;
        a1=dp[i-1][j][(p-o+k)%k][1];
        a2=dp[i][j-1][(p-o+k)%k][1];
        a3=dp[i-1][j][(p+o+k)%k][0];
        a4=dp[i][j-1][(p+o+k)%k][0];
        dp[i][j][p][0]=(dp[i][j][p][0]+a1+a2)%mo;
        dp[i][j][p][1]=(dp[i][j][p][1]+a3+a4)%mo;
    }

    for (int i=1;i<=n;i++)
    for (int j=1;j<=m;j++)
    {
        ans=(ans+dp[i][j][0][1])%mo;
    }
    cout<<ans;
}


0 0
原创粉丝点击