30pts求调
查看原帖
30pts求调
1181602
Cute_Furina楼主2025/1/14 22:25
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node {
	int x, y;
};
int n, m, dp[1010][1010];
node f[10010], b[10010];
string s;
int qwq(int x, int y) {
	int cnt = (f[x].x - b[y].x) * (f[x].x - b[y].x);
	int sum = (f[x].y - b[y].y) * (f[x].y - b[y].y);
	return  cnt + sum;
}
signed main() {
	cin >> n >> m >> f[0].x >> f[0].y >> b[0].x >> b[0].y >> s;
	for(int i = 0;i < s.size();i ++) {
		if(s[i] == 'N') {
			f[i + 1].x = f[i].x;
			f[i + 1].y = f[i].y + 1;
		}
		if(s[i] == 'E') {
			f[i + 1].x = f[i].x + 1;
			f[i + 1].y = f[i].y;
		}
		if(s[i] == 'S') {
			f[i + 1].x = f[i].x;
			f[i + 1].y = f[i].y - 1;
		}
		if(s[i]=='W') {
			f[i + 1].x = f[i].x - 1;
			f[i + 1].y = f[i].y - 1;
		}
	}
	cin >> s;
	for(int i = 0;i < s.size();i ++) {
		if(s[i] == 'N') {
			b[i + 1].x = b[i].x;
			b[i + 1].y = b[i].y + 1;
		}
		if(s[i] == 'E') {
			b[i + 1].x = b[i].x + 1;
			b[i + 1].y = b[i].y;
		}
		if(s[i] == 'S') {
			b[i + 1].x = b[i].x;
			b[i + 1].y = b[i].y - 1;
		}
		if(s[i]=='W') {
			b[i + 1].x = b[i].x - 1;
			b[i + 1].y = b[i].y;
		}
	}
	dp[0][0] = 0;
	for(int i = 1;i <= n;i ++) {
		dp[i][0] = qwq(i, 0) + dp[i - 1][0];
	}
	for(int i = 1;i <= m;i ++) {
		dp[0][i] = qwq(0, i) + dp[0][i - 1];
	}
	for(int i = 1;i <= n;i ++) {
		for(int j = 1;j <= m;j ++) {
			dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1]));
			dp[i][j] += qwq(i, j);
		}
	}
	cout << dp[n][m];
	return 0;
}
2025/1/14 22:25
加载中...