Submission

Status:

[PPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: Dark_kingdom

Problemset: อัศวินขี่ม้าขาว

Language: cpp

Time: 0.167 second

Submitted On: 2026-10-13 14:48:10

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	int N,M;
	cin>>N>>M;
	
	vector<vector<int>> A(N, vector<int>(M));
	
	
	for(int i = 0; i<N; i++)
	{
		for(int j = 0;j<M; j++)
		{
			cin>>A[i][j];
		}
	}
	
	vector<vector<int>> dp(N, vector<int>(M));
	
	dp[N-1][M-1] = max(1, 1 - A[N-1][M-1]);
	
	for(int i = N-1; i>=0; i--)
	{
		for(int j = M-1; j>=0; j--)
		{
			if(i == N-1 && j == M-1)
			{
				continue;
			}
			
			int need;
			
			if(i == N-1)
			{
				need = dp[i][j+1];
			}
			
			else if((j == M-1))
			{
				need = dp[i+1][j];
			}
			
			else
			{
				need = min(dp[i+1][j], dp[i][j+1]);
			}
			
			dp[i][j] = max(1, need - A[i][j]);
		}
	}
	
	cout<< dp[0][0]<<"\n";
	
	return 0;
}