CodeForces - 812B [DP]

这道题一开始以为是有规律的的, 想通过最大区域的0来计算,然后用bfs来解决,但是写到一半又发现思路错了,最后还是学长提醒我用dp思路去做,纪录最右和最左的点,dp已经很久没做了,看了网上其他题解才明白要怎么去维护那些状态,里面有几个点需要注意一下:

1.所有的数都为0

2.最下面楼层的dp方式不一样

3.每次dp要保存前一个的状态 因为下一次会变化

AC代码:

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int dp[20][110];
char mapp[20][110];
int n,m;
int x,y;

int main() {
	scanf("%d%d",&n,&m);
	x = -1;
	y = -1;
	for(int i = 1; i <= n; i++) {
		scanf("%s",mapp[i]+1);
		if(x != -1 && y != -1) {
			continue;
		}
		for(int j = 1; j <= m+2; j++) {
			if(mapp[i][j] == '1') {
				x = i;
				y = j;
				break;
			}
		}
	}
	//x纪录的是最上面没有关灯的层数
	if(x == -1 && y == -1) {
		printf("0\n");
	} 
	else {
		int l, r;
		memset(dp, INF, sizeof(dp));
		dp[n][1] = 0;
		for(int  i = n; i > 0; i--) {
			dp[i][1] = min(dp[i][1], dp[i+1][1] + 1);
			dp[i][m+2] = min(dp[i][m+2], dp[i+1][m+2] + 1);
			l = 0;
			r = 0;
			for(int j = 2; j <= m+1; j++) {
				if(mapp[i][j] == '1') {
					if(!l) {
						l = j;
					}
					r = j;
				}
			}
			int w = dp[i][1];//记录
			if(r) {
				dp[i][1] = min(dp[i][1] + 2*(r-1), dp[i][m+2]+m+1);
				//1 到最右边的 5 来回就是(5-1)*2 = 8 步数
			}
			if(l) {
				dp[i][m+2] = min(dp[i][m+2] + 2*(m+2-l), w+m+1);
				//最右的m+2位置到最左的位置为 ((m+2) - l)*2 步数
				// 这里的w是之前标记的dp【i】【1】 因为上一个判断会让这个值发生变化
			}
		}
		l = 0, r = 0;
		for(int i = 1; i <= m+2; i++) {
			if(mapp[x][i] == '1') {
				if(!l) {
					l = i;
				}
				r = i;
			}
		}
		int ans = min(dp[x+1][1] + r, dp[x+1][m+2] + (m+2-l) + 1);
		if(x == n) {
			ans = r - 1;
		}
		printf("%d\n",ans);
	}
	return 0;
}

 

全部评论

相关推荐

02-04 17:01
南昌大学 Java
牛客96763241...:拿插件直接投就完了,这玩意看运气的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 大厂实习和小厂实习最大的区别是什么? #
2536次浏览 20人参与
# 参加完秋招的机械人,还参加春招吗? #
119953次浏览 761人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
18853次浏览 309人参与
# 牛友の3月总结 #
1951次浏览 30人参与
# 这些公司卡简历很严格 #
95211次浏览 417人参与
# 面试被问到不会的问题,你怎么应对? #
696次浏览 8人参与
# 厦门银行科技岗值不值得投 #
9888次浏览 253人参与
# 拼多多工作体验 #
52691次浏览 342人参与
# 研究所VS国企,该如何选 #
259073次浏览 2013人参与
# 通信硬件知识分享 #
48139次浏览 538人参与
# 找AI工作可以去哪些公司? #
17178次浏览 756人参与
# 从事AI岗需要掌握哪些技术栈? #
14990次浏览 852人参与
# 你做过最难的笔试是哪家公司 #
47602次浏览 763人参与
# 实习最想跑路的瞬间 #
130962次浏览 740人参与
# 金三银四,你的春招进行到哪个阶段了? #
24603次浏览 297人参与
# 说说你知道的学历厂 #
391012次浏览 1379人参与
# AI面会问哪些问题? #
36345次浏览 1081人参与
# 想给25届机械人的秋招建议 #
47745次浏览 251人参与
# 机械人避雷的岗位/公司 #
62887次浏览 395人参与
# 大厂无回复,继续等待还是奔赴小厂 #
343363次浏览 1988人参与
# 滴!实习打卡 #
814720次浏览 6858人参与
# 我心目中的理想工作是这样的 #
100878次浏览 907人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务