zoukankan      html  css  js  c++  java
  • 提高DP

     方格取数

    #include <iostream>
    #include <algorithm>
    const int N = 12;
    int f[N*2][N][N], a[N][N];//注意这里f数组的第一维的大小应该为2*N,因为表示的是走到的方格行+列
    using namespace std;
    
    int main()
    {
        int n;
        cin>>n;
        int r, l, x;
        while(cin>>r>>l>>x, r || l || x)
            a[r][l] = x;
        
        for(int k = 2; k <= n + n; 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 = a[i1][j1];
                        if(i1 != i2) t += a[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][i2-1] + t);
                        x = max(x, f[k - 1][i1-1][i2] + t);
                        x = max(x, f[k - 1][i1][i2] + t);
                    }
                }
        cout<<f[2*n][n][n]<<endl;
    }
  • 相关阅读:
    List sort()方法
    解析器
    beautifulsoup库
    break 语句
    enumerate函数
    POJ 1915 Knight Moves
    POJ 1745 Divisibility
    POJ 1731 Orders
    POJ 1664 放苹果
    POJ 1606 Jugs
  • 原文地址:https://www.cnblogs.com/longxue1991/p/12761985.html
Copyright © 2011-2022 走看看