zoukankan      html  css  js  c++  java
  • 1027. 方格取数(数字三角模型)

     

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 15;
    int w[N][N], f[2*N][N][N];
    int n, a, b, c;
    
    int main() {
        scanf("%d",&n);
        
        while(cin >> a >> b >> c, a || b || c) w[a][b] = c;
        // f[k][x1][x2] 表示当前路径长度为k 且第一条路径横坐标为x1第二题路径横坐标为x2的最大和
        for(int k = 1; k < 2*n; k++) {
            for(int x1 = 1; x1 <= min(k,n); x1++) {
                for(int x2 = 1; x2 <= min(k,n); x2++) {
                    int y1 = k + 1 - x1, y2 = k + 1 -x2;
                    if(x1 == x2) {
                        f[k][x1][x2] = max(f[k][x1][x2],f[k-1][x1][x2] + w[x1][y1]);
                        f[k][x1][x2] = max(f[k][x1][x2],f[k-1][x1-1][x2-1] + w[x1][y1]);
                        f[k][x1][x2] = max(f[k][x1][x2],f[k-1][x1][x2-1] + w[x1][y1]);
                        f[k][x1][x2] = max(f[k][x1][x2],f[k-1][x1-1][x2] + w[x1][y1]);
                    } else {
                        f[k][x1][x2] = max(f[k][x1][x2],f[k-1][x1][x2] + w[x1][y1] + w[x2][y2]);
                        f[k][x1][x2] = max(f[k][x1][x2],f[k-1][x1-1][x2-1] + w[x1][y1] + w[x2][y2]);
                        f[k][x1][x2] = max(f[k][x1][x2],f[k-1][x1-1][x2] + w[x1][y1] + w[x2][y2]);
                        f[k][x1][x2] = max(f[k][x1][x2],f[k-1][x1][x2-1] + w[x1][y1] + w[x2][y2]);
                    }
                    
                }
            }
        }
        printf("%d
    ",f[2*n-1][n][n]);
        return 0;
    }

     二维dp:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 15;
    int w[N][N], f[N][N];
    int n, a, b, c;
    
    int main() {
        scanf("%d",&n);
        
        while(cin >> a >> b >> c, a || b || c) w[a][b] = c;
    
        for(int k = 1; k < 2*n; k++) {
            for(int x1 = min(k,n); x1 > 0; x1--) {
                for(int x2 = min(k,n); x2 > 0; x2--) {
                    int y1 = k + 1 - x1, y2 = k + 1 -x2;
                    int t = x1 == x2 ? w[x1][y1] : (w[x2][y2] + w[x1][y1]);
                    f[x1][x2] = max(f[x1][x2],max(f[x1-1][x2-1],max(f[x1-1][x2],f[x1][x2-1]))) + t;
                }
            }
        }
        printf("%d
    ",f[n][n]);
        return 0;
    }
  • 相关阅读:
    iOS 3D 之 SceneKit框架Demo分析
    MVC 之Action
    ASP.NET MVC 路由机制
    数据库一对一,一对多,多对多关系
    jquery选择器(原创)<四>
    jquery选择器(原创)<三>
    jquery选择器(原创)<二>
    jquery选择器(原创)
    Jquery对象,DOM对象
    JQuery选择器
  • 原文地址:https://www.cnblogs.com/yonezu/p/13612607.html
Copyright © 2011-2022 走看看