根据标题可知 这道题一定是一道枚举题
这道题考虑使用dfs,处理特殊处理第一层,每次加答案时选最优值。
给出代码:
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
char mat[20][110];
int dfs(int cnt,int pos,int tmp)//cnt:楼层pos:哪里的楼梯tmp走到楼梯的步数
{if(cnt<0) return 0;int ans=0;if(pos){for(int i=m+2;i>=0;i--){if(mat[cnt][i]=='1'){ans+=pos-i+tmp;//计算pos=i;tmp=0;}}}else{for(int i=0;i<m+2;i++){if(mat[cnt][i]=='1'){ans+=i-pos+tmp;//计算pos=i;tmp=0;}}}ans+=min(dfs(cnt-1,0,tmp+pos+1),dfs(cnt-1,m+1,tmp+m+2-pos));//两边楼梯,两种情况取小return ans;//返回
}int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);while(cin>>n>>m) {for(int i=0;i<n;i++){for(int j=0;j<m+2;j++){cin>>mat[i][j];}}cout<<dfs(n-1,0,0)<<endl;}return 0;
}