LXNGC2237 题目问答 · 2024/4/11
记忆化搜索
记忆化搜索 ```cpp #include <bits/stdc++.h> using namespace std; int n,m,k,f[55][55],dp[55][55][55][55]; long long ans; long long dfs(int x,int y,int nm,int t) { if(x>n||y>m)return 0; if(dp[x][y][nm][t]!=-1)return dp[x][y][nm][t]; if(x==n&&y==m) { if(t==k||(t+1==k&&f[x][y]>nm)) { return 1; } return 0; } long long res=0; if(nm<f[x][y]) { res+=dfs(x,y+1,f[x][y],t+1); res+=dfs(x+1,y,f[x][y],t+1); } res+=dfs(x,y+1,nm,t); res+=dfs(x+1,y,nm,t); dp[x][y][nm][t]=res%1000000007; return res%1000000007; } int main() { cin>>n>>m>>k; memset(dp, -1, sizeof(dp)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>f[i][j]; } } cout<<dfs(1,1,-1,0); } ```
查看全文
0 0 0 18