zoukankan      html  css  js  c++  java
  • 题解 P1373 【小a和uim之大逃离】

    题目链接:Link

    Problem

    Solution

    又是一道大力dp题。因为起点不固定,所以必须要分是小a还是uim到达两种状态。
    为啥我m敲成n还拿了50分。。。害得我查了半天。。。数据一点区分度有没有。。。

    Code

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=805;
    const int mod=1e9+7;
    int n,m,p,a[maxn][maxn],f[maxn][maxn][20][2];
    int main()
    {
    	#ifdef local
    	freopen("pro.in","r",stdin);
    	#endif
    	scanf("%d%d%d",&n,&m,&p); p++;
    	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]);
    	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) f[i][j][a[i][j]%p][0]=1;
    	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) for(int k=0;k<p;k++)
    	{
    		int v=f[i][j][k][0];
    		(f[i+1][j][((k-a[i+1][j])%p+p)%p][1]+=v)%=mod;
    		(f[i][j+1][((k-a[i][j+1])%p+p)%p][1]+=v)%=mod;
    		v=f[i][j][k][1];
    		(f[i+1][j][(k+a[i+1][j])%p][0]+=v)%=mod;
    		(f[i][j+1][(k+a[i][j+1])%p][0]+=v)%=mod;
    	}
    	int res=0;
    	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) (res+=f[i][j][0][1])%=mod;
    	printf("%d
    ",res);
    	return 0;
    }
    
  • 相关阅读:
    用js遍历生成数独可行数据(未优化版本)
    JS生成tips小工具
    Iframe使用
    二级指针作输入的三种内存模型
    货品的进出库模型
    约瑟夫问题
    vector
    CUDA并行简单加法
    第一个CUDA程序
    在Ubuntu下安装、配置和测试cuda[复制]
  • 原文地址:https://www.cnblogs.com/happyZYM/p/11755925.html
Copyright © 2011-2022 走看看