zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    浅谈Java中的equals和==与hashCode
    数组操作
    python-类
    javascript操控浏览器
    javascript_获取浏览器属性
    javascript_data
    python3_phantomJS_test
    python检测字符串的字母
    python百分比数比较大小
    selenium加载时间过长
  • 原文地址:https://www.cnblogs.com/clown9804/p/12561595.html
Copyright © 2011-2022 走看看