fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define INF 1000000000
  5. #define MAX 205
  6. int a[MAX][MAX][MAX];
  7. int dp[MAX][MAX][MAX];
  8. int m, x, y, z;
  9.  
  10. void solve() {
  11. scanf("%d", &m);
  12. // Đọc giá trị và chuẩn hóa toạ độ
  13. for (int j = 1; j <= 1 + 3 * m * (m + 1); j++) {
  14. int q, r, i, val;
  15. scanf("%d %d %d %d", &q, &r, &i, &val);
  16. a[q + m][r + m][i + m] = val;
  17. }
  18. scanf("%d %d %d", &x, &y, &z);
  19.  
  20. // Khởi tạo dp = INF
  21. for (int i = 0; i <= 2 * m; i++) {
  22. for (int j = 0; j <= 2 * m; j++) {
  23. for (int k = 0; k <= 2 * m; k++) {
  24. dp[i][j][k] = INF;
  25. }
  26. }
  27. }
  28.  
  29. // Base-case: các ô trên biên (q==0 hoặc r==0 hoặc s==0)
  30. for (int q = 0; q <= 2 * m; q++) {
  31. for (int r = 0; r <= 2 * m; r++) {
  32. int s = 3 * m - q - r;
  33. if (s >= 0 && s <= 2 * m) {
  34. if (q == 0 || r == 0 || s == 0) {
  35. dp[q][r][s] = a[q][r][s];
  36. }
  37. }
  38. }
  39. }
  40.  
  41. // Chuyển trạng thái
  42. for (int q = 0; q <= 2 * m; q++) {
  43. for (int r = 0; r <= 2 * m; r++) {
  44. for (int s = 0; s <= 2 * m; s++) {
  45. if (q + r + s != 3 * m) continue;
  46.  
  47. int best = dp[q][r][s];
  48. // từ (q-1, r, s+1)
  49. if (q - 1 >= 0 && s + 1 <= 2 * m && dp[q - 1][r][s + 1] != INF) {
  50. best = max(best, dp[q - 1][r][s + 1] + a[q][r][s]);
  51. }
  52. // từ (q+1, r-1, s)
  53. if (q + 1 <= 2 * m && r - 1 >= 0 && dp[q + 1][r - 1][s] != INF) {
  54. best = max(best, dp[q + 1][r - 1][s] + a[q][r][s]);
  55. }
  56. // từ (q, r-1, s+1)
  57. if (r - 1 >= 0 && s + 1 <= 2 * m && dp[q][r - 1][s + 1] != INF) {
  58. best = max(best, dp[q][r - 1][s + 1] + a[q][r][s]);
  59. }
  60. dp[q][r][s] = best;
  61. }
  62. }
  63. }
  64.  
  65. // Tìm kết quả lớn nhất
  66. printf("%d\n", dp[x + m][y + m][z + m]);
  67. }
  68.  
  69. int main() {
  70. solve();
  71. return 0;
  72. }
  73.  
Success #stdin #stdout 0.01s 5776KB
stdin
1
0 0 0 5
0 -1 1 5
0 1 -1 5
-1 0 1 5
1 0 -1 5
-1 1 0 5
1 -1 0 5
0 1 -1
stdout
20