UVA1366 Martian Mining 题解

这个题可以用动态规划解决。
sbei,j 为第 j1i 个格子 BE 矿总和,令snwi,j 为第 i1j 个格子 NEW 矿总和。
dpi,j,0 表示为以第(ij)为右下角,第(ij)号格子建立 BE 矿管道的最大采矿量。
dpi,j,1 表示为以第(ij)为右下角,第(ij)号格子建立 NEW 矿管道的最大采矿量。

不难得到以下转移方程:
dpi,j,1=max(dpi1,j,0,dpi1,j,1)+sbei,j
dpi,j,0=max(dpi,j1,0,dpi,j1,1)+snwi,j

最终输出:max(dpn,m,0,dpn,m,1)
时间复杂度:O(n×m)

1|0AC CODE

#include<bits/stdc++.h> using namespace std; int n,m,b[505][505],nw[505][505],sbe[505][505],snw[505][505],dp[505][505][2],ans1,ans2; bool bk[505][505]; int main(){ while(cin>>n>>m&&n&&m){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&b[i][j]); } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&nw[i][j]); } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ sbe[i][j]=sbe[i][j-1]+b[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ snw[i][j]=snw[i-1][j]+nw[i][j]; } } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ dp[i][j][1]=max(dp[i-1][j][0],dp[i-1][j][1])+sbe[i][j]; dp[i][j][0]=max(dp[i][j-1][0],dp[i][j-1][1])+snw[i][j]; } cout<<max(dp[n][m][1],dp[n][m][0])<<endl; } return 0; }

__EOF__

本文作者xdh2012
本文链接https://www.cnblogs.com/xdh2012/p/17767248.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Xu_dh  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示