You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.2 KiB

2 years ago
#include <bits/stdc++.h>
using namespace std;
int n;
int d[50][2];
int ans;
void dfs(int n, int sum) {
if (n == 1) { //递归出口,最后一行时就停止了
ans = max(sum, ans); // max(每条路径的最结果)
return;
}
//当站在第n个位置时有下面n-1 种选择
//枚举所有比自己小的行
for (int i = 1; i < n; i++) {
//相邻行叠加
int a = d[i - 1][0];
int b = d[i - 1][1];
int x = d[i][0];
int y = d[i][1];
d[i - 1][0] = a + x; //叠加
d[i - 1][1] = b + y; //叠加
for (int j = i; j < n; j++)
d[j][0] = d[j + 1][0], d[j][1] = d[j + 1][1]; //空行用复制数据过来n-1-i行
int s = a + x + abs(b - y); //第一列和+abs(第二列差)
//走下一个位置
dfs(n - 1, sum + s);
//还原现场
for (int j = n - 1; j > i; j--)
d[j][0] = d[j - 1][0], d[j][1] = d[j - 1][1];
d[i - 1][0] = a;
d[i - 1][1] = b;
d[i][0] = x;
d[i][1] == y;
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> d[i][0]; // n行第0列
for (int i = 0; i < n; i++) cin >> d[i][1]; // n行第1列
dfs(n, 0);
cout << ans << endl;
return 0;
}