40分,两遍动态规划,求助QAQ
查看原帖
40分,两遍动态规划,求助QAQ
666940
Wufei_OvO楼主2023/8/1 10:16

这是代码qwq

#include <bits/stdc++.h>
using namespace std;
const int Maxn = 11;
int Num;
int Tr[Maxn][Maxn];
int Dp1[Maxn][Maxn];
bool UR[Maxn][Maxn];
int Dp2[Maxn][Maxn];
int main()
{
	cin >> Num;
	while(true)
	{
		int X,Y,Value;
		cin >> X >> Y >> Value;
		Tr[X][Y] = Value;
		if(Value == 0)
		{
			break;
		}
	}
	for(int i = 1;i <= Num;i++)
	{
		Dp1[i][1] = Tr[i - 1][1] + Tr[i][1];
		UR[i][1] = false;
		Dp1[1][i] = Tr[1][i - 1] + Tr[1][i];
		UR[1][i] = true;
	}
	Dp1[1][1] = Tr[1][1];
	/*
	for(int i = 1;i <= Num;i++)
	{
		for(int j = 1;j <= Num;j++)
		{
			cout << Dp1[i][j] << " ";
		}
		cout << endl;
	}
	*/
	for(int i = 2;i <= Num;i++)
	{
		for(int j = 2;j <= Num;j++)
		{
			if(Dp1[i][j - 1] >= Dp1[i - 1][j])
			{
				Dp1[i][j] = Dp1[i][j - 1] + Tr[i][j];
				UR[i][j] = true;
			}else
			{
				Dp1[i][j] = Dp1[i - 1][j] + Tr[i][j];
				UR[i][j] = false;
			}
		}
	}
	for(int i = Num;i >= 1;)
	{
		int j;
		for(j = Num;j >= 1;)
		{
			if(i < 1)
			{
				break;
			}
			if(UR[i][j])
			{
				Tr[i][j - 1] = 0;
				j--;
			}else
			{
				Tr[i - 1][j] = 0;
				i--;
			}
			//cout << i << " " << j << endl;
		}
		if(j < 1)
		{
			break;
		}
	}
	/*
	for(int i = 1;i <= Num;i++)
	{
		for(int j = 1;j <= Num;j++)
		{
			cout << Tr[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
	*/
	for(int i = 1;i <= Num;i++)
	{
		Dp2[i][1] = Tr[i - 1][1] + Tr[i][1];
		Dp2[1][i] = Tr[1][i - 1] + Tr[1][i];
	}
	Dp2[1][1] = Tr[1][1];
	for(int i = 2;i <= Num;i++)
	{
		for(int j = 2;j <= Num;j++)
		{
			if(Dp2[i][j - 1] >= Dp2[i - 1][j])
			{
				Dp2[i][j] = Dp2[i][j - 1] + Tr[i][j];
			}else
			{
				Dp2[i][j] = Dp2[i - 1][j] + Tr[i][j];
			}
		}
	}
	cout << Dp1[Num][Num] + Dp2[Num][Num];
	
}

2023/8/1 10:16
加载中...