zoukankan      html  css  js  c++  java
  • 【四维dp】 方格取数

    传送门

    题意

    给定一个(N imes N) 的方格,只能向下和向右行走,有些方格上有一些数字,其余为(0),每个数字只能取一次,一个人从左上角走到右下角两次能够取得的数字最大是多少

    数据范围

    (1 leq N leq 9)

    题解

    两个人同时走,四维分别表示两个人,如果两人的路线相同那么只能加一次即可

    Code

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,n) for(int i=a;i<n;i++)
    const int N=110;
    int n;
    int a[N][N];
    int f[N][N][N][N];
    int main()
    {
        scanf("%d",&n);
        int x,y,z;
        while(scanf("%d%d%d",&x,&y,&z) && x&&y&&z)
            a[x][y]=z;
    
        rep(i,1,n+1) rep(j,1,n+1) rep(k,1,n+1) rep(l,1,n+1)
        {
             f[i][j][k][l]=max(f[i-1][j][k-1][l],max(f[i][j-1][k-1][l],max(f[i-1][j][k][l-1],f[i][j-1][k][l-1])));
             f[i][j][k][l]+=a[i][j]+a[k][l];
             if(i==k&&j==l) f[i][j][k][l]-=a[i][j];
        }
        printf("%d
    ",f[n][n][n][n]);
    }
    
  • 相关阅读:
    python爬虫(二)_HTTP的请求和响应
    python迭代器
    矩阵快速幂
    hdu 2256 Problem of Precision
    牛客练习赛17 ABD
    hdu 1575 Tr A
    hdu 1757 矩阵快速幂
    51nod 1402最大值
    51nod 1393 0和1相等串
    勤奋的杨老师
  • 原文地址:https://www.cnblogs.com/hhyx/p/13383838.html
Copyright © 2011-2022 走看看