欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

2021.04.14HDOJ

发布时间:2025/3/19 编程问答 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 2021.04.14HDOJ 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

猫和老鼠(4)


Sample Input
3 1
1 2 5
10 11 6
12 12 7
-1 -1
Sample Output
37

#include <bits/stdc++.h> using namespace std; const int maxn=110; int dp[maxn][maxn];//dp[i][j]:从(i,j)开始能获得的最多奶酪 int g[maxn][maxn]; int n,k; int dfs(int x,int y){if(dp[x][y]) return dp[x][y];dp[x][y]=g[x][y];for(int i=1; i<=k; i++){//横坐标正向走i步,且下一个洞奶酪比当前的多 if(x+i<=n-1&&g[x+i][y]>g[x][y]){dp[x][y]=max(dp[x][y],g[x][y]+dfs(x+i,y));}if(x-i>=0&&g[x-i][y]>g[x][y]){dp[x][y]=max(dp[x][y],g[x][y]+dfs(x-i,y));}if(y+i<=n-1&&g[x][y+i]>g[x][y]){dp[x][y]=max(dp[x][y],g[x][y]+dfs(x,y+i));}if(y-i>=0&&g[x][y-i]>g[x][y]){dp[x][y]=max(dp[x][y],g[x][y]+dfs(x,y-i));}}return dp[x][y]; } int main() {while(cin>>n>>k){if(n==-1&&k==-1) break;memset(dp,0,sizeof(dp)); //初始化 for(int i=0; i<n; i++){for(int j=0; j<n; j++){cin>>g[i][j];}}dfs(0,0);cout<<dp[0][0]<<endl;}return 0; } #include <bits/stdc++.h> using namespace std; const int maxn=110; int dp[maxn][maxn]; int g[maxn][maxn]; int n,k; int dx[]={1,0,-1,0},dy[]={0,1,0,-1}; int dfs(int x,int y){if(dp[x][y]) return dp[x][y];int ans=0;for(int i=0; i<4; i++){for(int j=1; j<=k; j++){//注意*jint nx=x+dx[i]*j,ny=y+dy[i]*j; if(0<=nx&&nx<=n-1&&0<=ny&&ny<=n-1&&g[nx][ny]>g[x][y]){ans=max(ans,dfs(nx,ny));}}}dp[x][y]=g[x][y]+ans;return dp[x][y]; } int main() {while(cin>>n>>k){if(n==-1&&k==-1) break;memset(dp,0,sizeof(dp));for(int i=0; i<n; i++){for(int j=0; j<n; j++){cin>>g[i][j];}}dfs(0,0);cout<<dp[0][0]<<endl;}return 0; }

How many ways


Sample Input
1
6 6
4 5 6 6 4 3
2 2 3 1 7 2
1 1 4 6 2 7
5 8 4 3 9 5
7 6 6 2 1 5
3 1 1 3 7 2
Sample Output
3948

#include <bits/stdc++.h> using namespace std; const int maxn=110; int g[maxn][maxn]; int n,m; int dp[maxn][maxn]; int dfs(int x,int y){if(dp[x][y]!=-1) return dp[x][y];dp[x][y]=0;for(int i=0; i<=g[x][y]; i++){for(int j=0; j<=g[x][y]-i; j++){ //表示消耗那个格子的能量能到达的格子//这里可以拐弯,如果,x走一步,y方向就少走一步if(x+i>=1&&x+i<=n&&y+j>=0&&y+j<=m){dp[x][y]=(dp[x][y]+dfs(x+i,y+j))%10000;}}}return dp[x][y]; } int main(){ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);int T; cin>>T;while(T--){cin>>n>>m;memset(dp,-1,sizeof(dp)); //必须初始化为-1,因为一个点可能为0,就不走了。如果初始为0,这个点就没法计算。for(int i=1; i<=n; i++){for(int j=1; j<=m; j++){cin>>g[i][j];}}//注意以下两操作的先后关系dp[n][m]=1;dfs(1,1);cout<<dp[1][1]<<endl;}return 0; }

总结

以上是生活随笔为你收集整理的2021.04.14HDOJ的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。