代码求助!WA了样例!
查看原帖
代码求助!WA了样例!
878013
_Supernova楼主2023/10/29 12:05
#include <bits/stdc++.h>
using namespace std;
const int maxnm = 1003;
int N, M, fx, fy, bx, by, lx, ly, dp[maxnm][maxnm], disx, disy, last;
char ci;
typedef struct node {
	int x, y;
} p;
p fj[maxnm], be[maxnm];   // 存第几步时双方的位置。struct. 
int main(void) {
	ios::sync_with_stdio(false);
	cin >> N >> M;
	cin >> fx >> fy;
	cin >> bx >> by;
	lx = fx, ly = fy;
	fj[0].x = lx, fj[0].y = ly;
	for (int i = 1; i <= N; ++i) {
		cin >> ci;
		if (ci == 'N') {
			++ly;
		}
		else if (ci == 'E') {
			++lx;
		}
		else if (ci == 'S') {
			--ly;
		}
		else {
			--lx;
		}
		fj[i].x = lx, fj[i].y = ly;
	}
	lx = bx, ly = by;
	be[0].x = lx, be[0].y = ly;
	for (int i = 1; i <= N; ++i) {
		cin >> ci;
		if (ci == 'N') {
			++ly;
		}
		else if (ci == 'E') {
			++lx;
		}
		else if (ci == 'S') {
			--ly;
		}
		else {
			--lx;
		}
		be[i].x = lx, be[i].y = ly;
	}
	for (int i = 1; i <= M; ++i) {
		disx = abs(be[i].x - fx);
		disy = abs(be[i].y - fy);
		dp[0][i] = pow(disx, 2) + pow(disy, 2) + dp[0][i - 1];
	}
	for (int i = 1; i <= N; ++i) {
		disx = abs(fj[i].x - bx);
		disy = abs(fj[i].y - by);
		dp[i][0] = pow(disx, 2) + pow(disy, 2) + dp[i - 1][0];
		last = dp[i][0];
	}
	for (int i = 1; i <= N; ++i) {
		for (int j = 1; j <= M; ++j) {
			disx = abs(fj[i].x - be[j].x);
			disy = abs(fj[i].y - be[i].y);
			dp[i][j] = min(dp[i - 1][j - 1] , min(dp[i][j - 1] , dp[i - 1][j])) + (pow(disx, 2) + pow(disy, 2));
		}
	}
	printf("%d", dp[N][M]);
	return 0;
}
2023/10/29 12:05
加载中...