2 条题解
-
1
补一个 20 分的暴力做法
#include <bits/stdc++.h> using namespace std; const int MAXN = 40; int n; int a[MAXN + 5], L[MAXN + 5], R[MAXN + 5]; int minDis, minCost; // 处于 (x,y) 的位置,之前的总代价为 pre,方向为 fx // x 正方向为 0,顺时针依次 0,1,2,3 // 要进行第 now 次抉择 void dfs(int now, int x, int y, int pre, int fx) { if (now > n) { if (x * x + y * y < minDis) { minDis = x * x + y * y; minCost = pre; } else if (x * x + y * y == minDis) minCost = min(minCost, pre); return; } if (fx == 0) { dfs(now + 1, x, y - a[now], pre + L[now], 1); dfs(now + 1, x, y + a[now], pre + R[now], 3); } else if (fx == 1) { dfs(now + 1, x - a[now], y, pre + L[now], 2); dfs(now + 1, x + a[now], y, pre + R[now], 0); } else if (fx == 2) { dfs(now + 1, x, y + a[now], pre + L[now], 3); dfs(now + 1, x, y - a[now], pre + R[now], 1); } else if (fx == 3) { dfs(now + 1, x + a[now], y, pre + L[now], 0); dfs(now + 1, x - a[now], y, pre + R[now], 2); } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; minDis = 0; for (int i = 1; i <= n; i++) { cin >> a[i]; minDis += a[i]; } minDis *= minDis; for (int i = 1; i <= n; i++) cin >> L[i]; for (int i = 1; i <= n; i++) cin >> R[i]; dfs(1, 0, 0, 0, 0); cout << minCost << "\n"; return 0; }
信息
- ID
- 1383
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 157
- 已通过
- 2
- 上传者