zoukankan      html  css  js  c++  java
  • 数字三角形 (DP入门)

    
    

    7

    3     8

    8     1     0

     2     7     4     4

     4     5     2     6     5

    
    



          给出一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 
         注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右边的那个数
    输入
      第一行是一个整数N (1 < N <= 100),给出三角形的行数。
      下面的N行给出数字三角形。数字三角形上的数的范围都在0和100之间。
    输出
      输出最大的和

    
    

     

    
    

    Sample input

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

    sample input

    
    
      • 30

    dp入门第一题
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[101][101];
     4 int d[101][101];
     5 int n;
     6 int F(int i,int j)//记忆化递归
     7 {
     8     if(d[i][j]>=0) return d[i][j];
     9     return d[i][j] = a[i][j] + (i == n ? 0 : max(F(i+1,j),F(i+1,j+1)));
    10 }
    11 int main()
    12 {
    13     memset(d,-1,sizeof(d));
    14     cin >>n;
    15     for(int i=1;i<=n;i++)
    16         for(int j=1;j<=i;j++)
    17             cin >> a[i][j];
    18     cout << F(1,1) << endl;
    19     return 0;
    20 }
    View Code
    代码
  • 相关阅读:
    [HNOI2013]切糕
    [POI2015]Kinoman
    「NOI2014」动物园
    [ZJOI2006]书架
    [HEOI2015]定价
    bzoj1833 数字计数
    bzoj2565 最长双回文子串
    bzoj4198 荷马史诗
    bzoj1193 马步距离
    bzoj3329 Xorequ
  • 原文地址:https://www.cnblogs.com/chen-tian-yuan/p/10547979.html
Copyright © 2011-2022 走看看