zoukankan      html  css  js  c++  java
  • HRBUST

    方格取数

    设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放人数字0。如下图所示(见样例 ,黄色和蓝色分别为两次走的路线,其中绿色的格子为黄色和蓝色共同走过的): 

    A
                 
        13     6    
            7      
          14        
      21       4    
        15          
      14            
                 
    B

    某人从图的左上角的A点出发,可以向下行走,也可以向右走,直到到达右下角的B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从A点到B点共走两次,试找出2条这样的路径,使得取得的数之和为最大

     

    Input 

    有多组测试数据,每组格式如下:
        第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。
    Output

    与输入对应,有多组输出,每组只需输出一个整数,表示2条路径上取得的最大的和。

    Sample Input

    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
    Sample Output

    67

    降维优化版:https://www.cnblogs.com/geloutingyu/p/7417863.html

    #include<bits/stdc++.h>
    #define MAX 15
    #define INF 0x3f3f3f3f
    #define MOD 1000000007
    using namespace std;
    typedef long long ll;
    
    int a[MAX][MAX];
    int dp[MAX][MAX][MAX][MAX];
    
    int main()
    {
        int n,x,y,z,i,j,k,l;
        while(~scanf("%d",&n)){
            memset(a,0,sizeof(a));
            memset(dp,0,sizeof(dp));
            while(scanf("%d%d%d",&x,&y,&z)&&x+y+z){
                a[x][y]=z;
            }
            for(i=1;i<=n;i++){
                for(j=1;j<=n;j++){
                    for(k=1;k<=n;k++){
                        for(l=1;l<=n;l++){
                            dp[i][j][k][l]=max(dp[i-1][j][k-1][l],max(dp[i-1][j][k][l-1],max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1])));
                            if(i==k&&j==l) dp[i][j][k][l]+=a[i][j];
                            else dp[i][j][k][l]+=a[i][j]+a[k][l];
                        }
                    }
                }
            }
            printf("%d
    ",dp[n][n][n][n]);
        }
        return 0;
    }
  • 相关阅读:
    LintCode "Maximum Gap"
    LintCode "Wood Cut"
    LintCode "Expression Evaluation"
    LintCode "Find Peak Element II"
    LintCode "Remove Node in Binary Search Tree"
    LintCode "Delete Digits"
    LintCode "Binary Representation"
    LeetCode "Game of Life"
    LintCode "Coins in a Line"
    LintCode "Word Break"
  • 原文地址:https://www.cnblogs.com/yzm10/p/9514443.html
Copyright © 2011-2022 走看看