zoukankan      html  css  js  c++  java
  • 7I

    在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 
    有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 

    已经告诉你了,这是个DP的题目,你能AC吗?

    Input

    输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。 

    Output

    对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。 

    Sample Input

    1
    5
    7
    3 8
    8 1 0 
    2 7 4 4
    4 5 2 6 5

    Sample Output

    30

    // 递归
     1 #include<stdio.h>
     2 
     3 int n, t[100][100];
     4 
     5 int tower(int i, int j)
     6 {
     7     if(i==n-1) return t[i][j];
     8     if(tower(i+1,j)>tower(i+1,j+1))
     9         return tower(i+1,j)+t[i][j];
    10     else
    11         return tower(i+1,j+1)+t[i][j];
    12 }
    13 
    14 int main()
    15 {
    16     int c;
    17     scanf("%d", &c);
    18     while(c--)
    19     {
    20         scanf("%d", &n);
    21         for(int i=0;i<n;i++)
    22             for(int j=0;j<=i;j++)
    23                 scanf("%d", &t[i][j]);
    24         printf("%d
    ",tower(0,0));
    25     }
    26     return 0;
    27 }
    Time Limit Exceeded
    // 
     1 #include<stdio.h>
     2 #include<string.h>
     3 int n, t[100][100], d[100][100];
     4 
     5 int tower(int i, int j)
     6 {
     7     if(d[i][j]>=0) return d[i][j];
     8     return d[i][j] = t[i][j] + (i==n-1?0:(tower(i+1,j)>tower(i+1,j+1)?tower(i+1,j):tower(i+1,j+1)));
     9 }
    10 
    11 int main()
    12 {
    13     int c;
    14     scanf("%d", &c);
    15     while(c--)
    16     {
    17         scanf("%d", &n);
    18         for(int i=0;i<n;i++)
    19             for(int j=0;j<=i;j++)
    20                 scanf("%d", &t[i][j]);
    21         memset(d,-1,sizeof(d));
    22         printf("%d
    ",tower(0,0));
    23     }
    24     return 0;
    25 }
    AC
  • 相关阅读:
    深度聚类算法浅谈
    最优运输(Optimal Transfort):从理论到填补的应用
    《Javscript实用教程》目录
    再见,深圳~长沙,我又来啦
    vue中手写table的升降序
    Linux离线安装Python3.6.8
    Python3的threading模块 lock、Rlock的使用
    Python3的multiprocessing多进程-示例
    Python3的multiprocessing多进程-Lock、Rlock进程同步
    Python3的multiprocessing多进程-Queue、Pipe进程间通信
  • 原文地址:https://www.cnblogs.com/goldenretriever/p/10357105.html
Copyright © 2011-2022 走看看