zoukankan      html  css  js  c++  java
  • luogu1373 小a和uim之大逃离 (dp)

    直接设f[i][j][k][l][2]是在(i,j)时两人分数是k,l,复杂度会爆掉

    但其实只需要知道两人分数只差就行了

    所以设f[i][j][k][2],k是分数之差%(K+1),最后一位表示该谁走了

     1 #include<bits/stdc++.h>
     2 #define pa pair<int,int>
     3 #define CLR(a,x) memset(a,x,sizeof(a))
     4 using namespace std;
     5 typedef long long ll;
     6 const int maxn=805,maxk=20,P=1e9+7;
     7 
     8 inline ll rd(){
     9     ll x=0;char c=getchar();int neg=1;
    10     while(c<'0'||c>'9'){if(c=='-') neg=-1;c=getchar();}
    11     while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
    12     return x*neg;
    13 }
    14 
    15 int N,M,K,w[maxn][maxn];
    16 int f[maxn][maxn][maxk][2];
    17 
    18 int main(){
    19     //freopen(".in","r",stdin);
    20     int i,j,k;
    21     N=rd(),M=rd();K=rd()+1;
    22     for(i=1;i<=N;i++){
    23         for(j=1;j<=M;j++)
    24             w[i][j]=rd();
    25     }
    26     int ans=0;
    27     for(i=1;i<=N;i++){
    28         for(j=1;j<=M;j++){
    29             for(k=0;k<K;k++){
    30                 f[i][j][k][0]=(f[i-1][j][(k-w[i][j]+K)%K][1]+f[i][j-1][(k-w[i][j]+K)%K][1]+(w[i][j]==k))%P;
    31                 f[i][j][k][1]=(f[i-1][j][(k+w[i][j])%K][0]+f[i][j-1][(k+w[i][j])%K][0])%P;
    32             }
    33             ans=(ans+f[i][j][0][1])%P;
    34         }
    35     }
    36     printf("%d
    ",ans);
    37     return 0;
    38 }
  • 相关阅读:
    组合模式
    过滤器模式
    桥接模式
    适配器模式
    原型模式
    建造者模式
    抽象工厂
    工厂方法
    静态工厂
    单例模式
  • 原文地址:https://www.cnblogs.com/Ressed/p/9782079.html
Copyright © 2011-2022 走看看