同济校赛|菜哭武的房子(dp)

题目

http://acm.tongji.edu.cn/problem.php?id=1115

题目大意

只能走1,并且只能往前左右走,最多能跨越几行(?)。

算法思路

  • dp[i][j]为前i行走到j格时,最多能走的行数。
if s[i][j]=1 : dp[i][j]=dp[i-1][j]
if s[i][j]=0 : dp[i][j]=max(dp[i-1][j]+1,dp[i][j-1])

一行dp结束之后要从右往左回溯一遍,一行有联通块都可以互相到达,前面只算了从左往右走的,没有算从右往左走的。

for(int j=m-1;j>=1;j--){
        if(s[i][j]=='1'&&s[i][j-1]=='1'){
            dp[i][j-1]=max(dp[i][j],dp[i][j-1]);
        }

这样子就好了。

代码

#include<cstdio>
#include<iostream>
#include<queue>
#include<cmath>
#include<cstring>
#include<algorithm>
#define ll long long
#define pb(x) push_back(x)
#define fir first
#define sec second
#define mem(a) memset(a,0,sizeof(a))
using namespace std;
const int INF=0x3f3f3f3f;
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
//ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
char s[510][510];
int dp[510][510];
int main(){
  ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
   int t;
   cin>>t;int k=0;
   while(t--){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>s[i];
        mem(dp);
    for(int i=1;i<=n;i++){
      for(int j=0;j<m;j++){
        if(s[i][j]=='0'){
            dp[i][j]=dp[i-1][j];
        }
        else{
            dp[i][j]=dp[i-1][j]+1;
            if(j&&s[i][j-1]=='1') dp[i][j]=max(dp[i][j],dp[i][j-1]);
        }
      }
      for(int j=m-1;j>=1;j--){
        if(s[i][j]=='1'&&s[i][j-1]=='1'){
            dp[i][j-1]=max(dp[i][j],dp[i][j-1]);
        }
      }
    }
    int ans=0;
    for(int j=0;j<m;j++)
        ans=max(ans,dp[n][j]);
    cout<<"Case #"<<++k<<":"<<endl;
    cout<<ans<<endl;
   }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,354评论 0 33
  • 分治方法 将问题划分成互不相交的子问题 递归地求解子问题 将子问题的解组合起来 动态规划(两个要素:最优子结构、子...
    superlj666阅读 3,490评论 0 0
  • (欢迎转载,但请注明出处并附带链接)算法好久没复习了,今天看见一妹子在办公室刷Leetcode,顿时我也来了兴趣,...
    Nick_Zuo阅读 3,919评论 0 3
  • 昨夜风香水琳琅,暮色苍茫大地黄。 归去来兮倾盆雨,踢踏彩灯月华舫。
    源哲学阅读 2,915评论 0 0
  • 林一已经办好入学手续了,并且知道了自己的宿舍号~~~~~520。林一觉得这个宿舍号特别吉利,也许这预示着好的...
    凝绝姑娘阅读 1,738评论 0 3

友情链接更多精彩内容