#12259. 珅泽教育CSP-J第一轮模拟考第二十四套 第 31 题
珅泽教育CSP-J第一轮模拟考第二十四套 第 31 题
二、阅读程序(判断题正确填 A、错误填 B;除特殊说明外,判断题 2 分,选择题 3 分,共计 40 分)
程序三:立方体滚动动态规划
#include <iostream>
using namespace std;
const int INF = 1000000000;
#define Front 0
#define Back 1
#define Left 2
#define Right 3
#define Up 4
#define Down 5
int w[6], a[1003][1003];
const int way1[] = {Up, Right, Down, Left};
const int way2[] = {Up, Front, Down, Back};
const int way3[] = {Left, Front, Right, Back};
int get_max(int &a, int b) {
return a = max(a, b);
}
int right_rotate(int &u) {
for (int i = 0; i < 4; ++i)
if (u == way1[i])
return u = way1[(i + 1) % 4];
return u;
}
int front_rotate(int &u) {
for (int i = 0; i < 4; ++i)
if (u == way2[i])
return u = way2[(i + 1) % 4];
return u;
}
const int anchorX = Up;
const int anchorY = Front;
const int anchorZ = Right;
int find_down(int u, int v) {
if (u == Down || u == Up) return anchorX ^ (u == Up);
if (v == Down || v == Up) return anchorY ^ (v == Up);
for (int i = 0; i < 4; ++i)
if (u == way3[i])
return anchorZ ^ (v == way3[(i + 1) % 4]);
return -1;
}
int n, m, dp[1003][1003][6][6];
int main() {
cin >> n >> m;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
cin >> a[i][j];
for (int i = 0; i < 6; ++i)
cin >> w[i];
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
for (int a = 0; a < 6; ++a)
for (int b = 0; b < 6; ++b)
dp[i][j][a][b] = -INF;
dp[0][0][anchorX][anchorY] = a[0][0] * w[Down];
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
for (int p = 0; p < 6; ++p)
for (int q = 0; q < 6; ++q)
if (dp[i][j][p][q] != -INF) {
int x = dp[i][j][p][q];
int u1 = p, v1 = q;
right_rotate(u1);
right_rotate(v1);
get_max(dp[i][j + 1][u1][v1],
x + w[find_down(u1, v1)] * a[i][j + 1]);
int u2 = p, v2 = q;
front_rotate(u2);
front_rotate(v2);
get_max(dp[i + 1][j][u2][v2],
x + w[find_down(u2, v2)] * a[i + 1][j]);
}
int ans = -INF;
for (int p = 0; p < 6; ++p)
for (int q = 0; q < 6; ++q)
ans = max(ans, dp[n - 1][m - 1][p][q]);
printf("%d\n", ans);
return 0;
}
输入数据的绝对值均不超过 。
- 将
anchorX、anchorY、anchorZ依次更换为哪组值时,对全部合法数据的输出不变?
{{ select(1) }}
- Left、Front、Down
- Left、Up、Front
- Left、Down、Back
- Down、Right、Front