zoukankan      html  css  js  c++  java
  • 动态规划入门一---------数字三角形

    题源:poj1163:http://poj.org/problem?id=1163

    题意:该题的意思是给一个三角形,找出从三角形最顶上走到最低边的一条加权最大的路之和(只能一直往下走)

    我的方法是从自底向上找,用一个数组存三角形最后一行的数,再一行一行往上找,找到最大的和更新数组的值,最后数组的第一个数就是最终值。每个点只标记一次,一共n*(n-1)/2个点,

    时间复杂度O(n*n(n-1)/2)

    代码:

     1 /*
     2 5
     3 7
     4 3 8
     5 8 1 0
     6 2 7 4 4
     7 4 5 2 6 5
     8 */
     9 
    10 #include <bits/stdc++.h>    
    11 using namespace std;
    12 const int maxn = 1010;
    13 
    14 int dp[maxn][maxn];
    15 int *s; 
    16 
    17 int main()
    18 {
    19     int t;
    20     int i,j;
    21     cin >> t;
    22     for(i = 0;i < t;++i){
    23         for(j = 0;j < i+1;++j){
    24             scanf("%d",&dp[i][j]);
    25         }
    26     }
    27     s = dp[t-1];
    28     for(i = t-2;i >= 0;--i){
    29         for(j = 0;j < i+1;++j){
    30             s[j] = max(dp[i][j]+s[j],s[j+1]+dp[i][j]);
    31         }
    32     }
    33     cout << s[0] << endl;
    34     return 0;
    35 }
  • 相关阅读:
    Kotlin 学习 (一)
    Spring Boot 学习(一)
    三大特性之继承
    OC中的点语法
    getter和setter
    三大特性之封装
    匿名对象
    对象作为返回值
    对象作为参数的连续传递
    对象作为参数传递
  • 原文地址:https://www.cnblogs.com/chenxi0x0/p/9684279.html
Copyright © 2011-2022 走看看