zoukankan      html  css  js  c++  java
  • 【题解】洛谷P1373 小a和uim之大逃离(坐标DP)

    次元传送门:洛谷P1373

    思路

    设f[i][j][t][1/0]表示走到(i,j)时 小a减去uim的差值为t 当前是小a取(0) uim取(1)

    那么转移就很明显了

    f[i][j][t][0]=(f[i][j][t][0]+f[i-1][j][(t-map[i][j]+k)%k][1])%1000000007;//因为当前是小a取 前一步是uim取 差值增加
    f[i][j][t][0]=(f[i][j][t][0]+f[i][j-1][(t-map[i][j]+k)%k][1])%1000000007;
    f[i][j][t][1]=(f[i][j][t][1]+f[i-1][j][(t+map[i][j]+k)%k][0])%1000000007;//因为当前是uim取 前一步是小a取 差值减少
    f[i][j][t][1]=(f[i][j][t][1]+f[i][j-1][(t+map[i][j]+k)%k][0])%1000000007;

    初始化

     f[i][j][map[i][j]%k][0]=1;//因为小a可以从任意一个地方出发

    答案存在每个点对应的f数组中 差值为0 且是uim取值的数组中

    代码

    #include<iostream>
    using namespace std;
    int f[805][805][20][2];
    int map[805][805];
    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++)
            {
                cin>>map[i][j];
                f[i][j][map[i][j]%k][0]=1;
            }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                for(int t=0;t<=k;t++)
                {
                    f[i][j][t][0]=(f[i][j][t][0]+f[i-1][j][(t-map[i][j]+k)%k][1])%1000000007;
                    f[i][j][t][0]=(f[i][j][t][0]+f[i][j-1][(t-map[i][j]+k)%k][1])%1000000007;
                    f[i][j][t][1]=(f[i][j][t][1]+f[i-1][j][(t+map[i][j]+k)%k][0])%1000000007;
                    f[i][j][t][1]=(f[i][j][t][1]+f[i][j-1][(t+map[i][j]+k)%k][0])%1000000007;
                }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                ans=(ans+f[i][j][0][1])%1000000007;
        cout<<ans;
    }
  • 相关阅读:
    项目Alpha冲刺(团队6/10)
    项目Alpha冲刺(团队5/10)
    项目Alpha冲刺(团队4/10)
    项目Alpha冲刺(团队3/10)
    项目Alpha冲刺(团队1/10)
    Alpha代码规范、冲刺任务与计划
    团队作业第六次—团队Github实战训练
    Alpha冲刺(8/10)——2019.4.30
    Alpha冲刺(7/10)——2019.4.29
    Alpha冲刺(6/10)——2019.4.28
  • 原文地址:https://www.cnblogs.com/BrokenString/p/9901929.html
Copyright © 2011-2022 走看看