zoukankan      html  css  js  c++  java
  • P1004 方格取数(四维动态规划)

    题目描述

    设有N imes NN×N的方格图(N le 9)(N9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00。如下图所示(见样例):

    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

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

    输入输出格式

    输入格式:

    输入的第一行为一个整数NN(表示N imes NN×N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的00表示输入结束。

    输出格式:

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

    输入输出样例

    输入样例#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

    说明

    NOIP 2000 提高组第四题

    看成两个人走t j表示一个人的位置,k l表示另一个人的位置

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<set>
    #include<vector>
    #include<map>
    #include<cmath>
    const int maxn=1e5+5;
    typedef long long ll;
    using namespace std;
    int Map[15][15];
    int dp[15][15][15][15];
    int main()
    {   
       int n;
       cin>>n;
       memset(Map,0,sizeof(Map));
       int x,y,w;
       while(scanf("%d%d%d",&x,&y,&w)!=EOF)
       {
           if(x==0)
           {
               break;
        }
           Map[x][y]=w;
       }
       for(int t=1;t<=n;t++)
       {
           for(int j=1;j<=n;j++)
           {
               for(int k=1;k<=n;k++)
               {
                   for(int l=1;l<=n;l++)
                   {
                       
                       dp[t][j][k][l]=max(max(dp[t-1][j][k-1][l],dp[t][j-1][k-1][l]),max(dp[t][j-1][k][l-1],dp[t-1][j][k][l-1]))+Map[t][j]+Map[k][l];
                       if(t==k&&j==l)
                       {
                           dp[t][j][k][l]-=Map[t][j];
                    }
                }
            }
        }
       }
       cout<<dp[n][n][n][n];
    
       return 0;
    }

     

  • 相关阅读:
    WF4.0 Beta1 自定义跟踪
    WF4.0 Beta1 流程设计器与Activity Designer
    新版本工作流平台的 (二) 权限算法(组织结构部分)
    WF4.0 Beta1 WorkflowInvoker
    WF4.0 基础篇 (十) Collection 集合操作
    WF4.0 基础篇 (十五) TransactionScope 事物容器
    WF4.0 基础篇 (六) 数据的传递 Arguments 参数
    WF4B1 的Procedural Activity 之InvokeMethod , InvokeMethod<T> 使用
    WF4.0 Beta1 异常处理
    WF4.0 Beta1 变量 Variables
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/11226548.html
Copyright © 2011-2022 走看看