《关于这个蒟蒻想尝试用二维加一维标记错误百出这档子事》
查看原帖
《关于这个蒟蒻想尝试用二维加一维标记错误百出这档子事》
600289
meowbot楼主2022/2/28 19:17

我蒟蒻qwq

本来想着有没有二维做法,结果这写了个什么鬼

#include<iostream>
using namespace std;
int map[101][101][2],m,n;
int main()
{
	cin>>m>>n;
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
			cin>>map[i][j][0];
	for(int i=1;i<=m;i++)
	{
		map[1][i][0]+=map[1][i-1][0];
		map[i][1][0]+=map[i-1][1][0];
		map[1][i][1]=1;
		map[i][1][1]=2;
	}
	for(int i=2;i<=m-1;i++)
		for(int j=2;j<=n-1;j++)
		{
			if(map[i][j][0]+map[i-1][j][0]>map[i][j][0]+map[i][j-1][0])
			{
				map[i][j][0]+=map[i-1][j][0];
				map[i][j][1]=map[i-1][j][1];
			}
			else
			{
				map[i][j][0]+=map[i][j-1][0];
				map[i][j][1]=map[i][j-1][1];
			}
		}
		for(int i=2;i<m;i++)
		{
			if(map[i][n-1][1]!=2)
			{
				map[i][n][0]+=max(map[i-1][n][0],map[i][n-1][0]);
			}
			else
			{
				map[i][n][0]+=map[i][n-1][0];
			}
		}
		for(int i=2;i<n;i++)
		{
			if(map[m][i-1][1]!=1)
			{
				map[m][i][0]+=max(map[m][i-1][0],map[m-1][i][0]);
			}
			else
			{
				map[m][i][0]+=map[m][i-1][0];
			}
		}
		cout<<map[m-1][n][0]+map[m][n-1][0]<<endl;
		return 0;
}

码风较丑,抱歉

具体想法就是先在边缘处理半圈,然后再带标记的递推dp过去,但是结果这个蒟蒻写得路线会重叠,求巨佬帮忙喵qwq

2022/2/28 19:17
加载中...