• 108.方格取数


    1043 方格取数

     

    2000年NOIP全国联赛提高组

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
    题目描述 Description

    设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例):

     

    某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。

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

     

    108.方格取数
    输入描述 Input Description

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

    输出描述 Output Description

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

    样例输入 Sample Input

          8

          13

           6

           7

          14

          21

           4

          6 3  15

          7 2  14

          0 0  0

    样例输出 Sample Output

          67

    数据范围及提示 Data Size & Hint
    如描述

    分类标签 Tags 点此展开 

    思路:两条路同时走,判断是否是相同点
    代码:
    #include< cstdio >
    #include< iostream >
    using namespace std;
    int jz[11][11],n,f[11][11][11][11];
    void input()
    {
    scanf("%d",&n);
    int x,y,p;
    while(scanf("%d%d%d",&x,&y,&p)==3)
    {
    if(x==0&&y==0&&p==0)
    break;
    jz[x][y]=p;
    }
    }
    int main()
    {
    input();
    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 x1=f[i-1][j][k-1][l];
          int x2=f[i-1][j][k][l-1];
          int x3=f[i][j-1][k-1][l];
          int x4=f[i][j-1][k][l-1];
          f[i][j][k][l]+=max(max(x1,x2),max(x3,x4));
          if(i!=k||j!=l)
          f[i][j][k][l]+=jz[i][j]+jz[k][l];
          else f[i][j][k][l]+=jz[i][j];
     }
    printf("%d ",f[n][n][n][n]);
    return 0;
    }
  • 相关阅读:
    AWTK-MVVM 在 STM32H743 上的移植笔记
    windows 中文 unicode 编码显示
    SpringBoot项目jar包运行
    Activiti中的互斥网关、并行网关、兼容网关、事件网关
    【LeetCode】739.每日温度(5种方法,详细图解)
    【LeetCode】20.有效的括号(使用栈,动图详解)
    你知道权限管理的RBAC模型吗?
    关闭Win10自动更新
    iOS 中如何判断当前是2G/3G/4G/5G/WiFi
    GCD API 记录 (三)
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5370709.html
Copyright © 2020-2023  润新知