• Acwing-----1027. 方格取数


    算法

    • 状态表示:(f(i1, j1, i2, j2))
      集合:所有从 ((1, 1)和(1, 1))((i1, j1)和(i2, j2)) 的路线
      属性:Max

    • 状态计算:集合的划分
      解决同一个格子不能被重复选择:
      (i1 + j1 == i2 + j2)相等,两条路径的格子才可能重合
      (f(k, i1, i2)) 表示所有从 ((1, 1)和(1, 1)) 分别走到((i1, k-i1)和(i2, k-i2))的路径最大值(k表示当前格子横纵坐标之和)

      方向 方向 方向 方向
      第一条
      第二条

    代码

    #include <iostream>
    using namespace std;
    
    const int N = 20;
    int n;
    int w[N][N], f[N][N][N];
    
    int main() {
        cin >> n;
        int a, b, c;
        while (cin >> a >> b >> c, a || b || c) w[a][b] = c;
        
        for (int k = 2; k <= n * 2; ++k) {
            for (int i1 = 1; i1 <= n; ++i1) {
                for (int i2 = 1; i2 <= n; ++i2) {
                    int j1 = k - i1, j2 = k - i2;
                    if (j1 >= 1&& j1 <= n && j2 >= 1&& j2 <= n) {
                        int t = w[i1][j1];
                        if (i1 != i2) t += w[i2][j2];
                        int &x = f[k][i1][i2];
                        x = max(x, f[k - 1][i1 - 1][i2 - 1] + t);
                        x = max(x, f[k - 1][i1 - 1][i2] + t);
                        x = max(x, f[k - 1][i1][i2 - 1] + t);
                        x = max(x, f[k - 1][i1][i2] + t);
                    }
                }
            }
        }
        cout << f[n + n][n][n] << endl;
        return 0;
    }
    
  • 相关阅读:
    junit4
    spring
    hibernate 的注意事项
    Struts2 的 命名规范
    Struts2 的标签
    OGNL
    添加删除 板块 struts2
    Struts2 的各种xml 和struts 配置信息 都是一样的
    struts2
    struts2
  • 原文地址:https://www.cnblogs.com/clown9804/p/12561595.html
Copyright © 2020-2023  润新知