zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    对开发者有用的英文网站合集
    比较全的OA系统功能模块列表
    OA系统权限管理设计方案
    OA系统启动:基础数据,工作流设计
    JS生成UUID
    java类过滤器,防止页面SQL注入
    Restful安全认证及权限的解决方案
    把表单转成json,并且name为key,value为值
    JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
    Jquery 获取第一个子元素
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5370709.html
Copyright © 2011-2022 走看看