zoukankan      html  css  js  c++  java
  • 洛谷P1004 方格取数[多维dp]

    题目描述

    设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放
    人数字0。如下图所示(见样例):
    A
    0 0 0 0 0 0 0 0
    0 0 13 0 0 6 0 0
    0 0 0 0 7 0 0 0
    0 0 0 14 0 0 0 0
    0 21 0 0 0 4 0 0
    0 0 15 0 0 0 0 0
    0 14 0 0 0 0 0 0
    0 0 0 0 0 0 0 0
    . B
    某人从图的左上角的A点出发,可以向下行走,也可以向右走,直到到达右下角的B

    点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。

    此人从A点到B点共走两次,试找出2条这样的路径,使得取得的数之和为最大。

    输入输出格式

    输入格式:
    输入的第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个

    表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。

    输出格式:
    只需输出一个整数,表示2条路径上取得的最大的和。

    输入输出样例

    输入样例#1:
    8
    2 3 13
    2 6 6
    3 5 7
    4 4 14
    5 2 21
    5 6 4
    6 3 15
    7 2 14
    0 0 0
    输出样例#1:
    67
    很裸的四维dp,每两个二维dp同时走,判断他们相不相交。

    #include "bits/stdc++.h"
    using namespace std;
    const int maxn = 10;
    int dp[maxn][maxn][maxn][maxn];
    int ar[maxn][maxn];
    int main() {
        int n;
        cin >> n;int a, b, c;
        memset(dp, 0, sizeof(dp));
        memset(ar, 0, sizeof(ar));
        while (scanf("%d%d%d",&a,&b,&c), a&&b&&c) ar[a][b]=c;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                for (int k = 1; k <= n; k++) {
                    for (int l = 1; l <= n; l++) {
                        int s1 = dp[i-1][j][k-1][l];
                        int s2 = dp[i][j-1][k][l-1];
                        int s3 = dp[i-1][j][k][l-1];
                        int s4 = dp[i][j-1][k-1][l];
                        int t = ar[k][l] + ar[i][j];
                        if (i==k&&j==l) t -= ar[i][j];
                        dp[i][j][k][l] = max(s1, max(max(s2, s3), s4)) + t;
                    }
                }
            }
        }
        printf("%d
    ", dp[n][n][n][n]);
        return 0;
    }
    View Code
  • 相关阅读:
    函数调用堆栈过程
    opencv相关的一些资料
    Debug模式下加快运行速度的一些方法
    目标检测的资料汇总
    Unity常见词汇查询表
    迷宫遍历板子
    Codeforces Round #739 (Div. 3)
    Codeforces Round #737 (Div. 2)
    快乐的一天从AC开始 | 20210810 | CF1554D
    快乐的一天从AC开始 | 20210809 | CF1554C
  • 原文地址:https://www.cnblogs.com/cniwoq/p/7285200.html
Copyright © 2011-2022 走看看