Submission
Status:
[PPPP-SSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: yypp
Problemset: อัศวินขี่ม้าขาว
Language: cpp
Time: 0.005 second
Submitted On: 2026-03-25 17:43:30
#include <bits/stdc++.h>
using namespace std;
int mp[1005][1005],n,m,inf=-1e9;
int wk[1005][1005];
pair<int,int> bf[1005][1005];
int wx[] = {1,0};
int wy[] = {0,1};
void dp(int x,int y) {
//printf("%d %d\n",x,y);
if (x==n&&y==m) {
return;
}
for (int i=0;i<2;i++) {
int ix = x+wx[i]; int iy = y+wy[i];
//printf("-> %d %d\n",ix,iy);
//printf("= %d %d %d\n",wk[x][y],mp[ix][iy],wk[ix][iy]);
//printf("ck %d %d %d %d %d\n",ix>=1,ix<=n,iy>=1,iy<=m,wk[x][y]+mp[ix][iy]<wk[ix][iy]);
//printf("ck2 %d %d %d %d\n",ix,n,iy,m);
if (ix>=1&&ix<=n&&iy>=1&&iy<=m&&wk[x][y]+mp[ix][iy]>wk[ix][iy]) {
//cout << "in\n";
wk[ix][iy] = wk[x][y]+mp[ix][iy];
bf[ix][iy] = {x,y};
dp(ix,iy);
}
}
}
int main() {
int tx,ty;
int ans=INT_MAX;
cin >> n >> m;
for (int i=1;i<=n;i++) {
for (int j=1;j<=m;j++) {
cin >> mp[i][j];
wk[i][j] = inf;
}
}
wk[1][1] = mp[1][1];
//cout << dp(1,1) << "\n";
dp(1,1);
/*
for (int i=1;i<=n;i++) {
for (int j=1;j<=m;j++) {
cout << wk[i][j] << " ";
}
cout << "\n";
}
*/
int x=n,y=m;
while(x!=0&&y!=0) {
//cout << x << " " << y << "\n";
ans = min(ans,wk[x][y]);
tx=x; ty=y;
x = bf[tx][ty].first; y = bf[tx][ty].second;
}
cout << 1-ans;
}