zoukankan      html  css  js  c++  java
  • 一道典型动态规划题

    问题 1177: 三角形

    时间限制: 1Sec 内存限制: 128MB 提交: 121 解决: 53

    题目描述

    7 
    3 8 

    8 1 0 

    2 7 4 4 

    4 5 2 6 5 

    (图一) 

    图一表示一个5行的数字三角形。假设给定一个n行数字三角形,计算出从三角形顶至底的一条路径,使该路径经过的数字总和最大。 
    每一步只能由当前位置向左下或右下。

    输入

    你的程序要能接受标准输入。第一行包含一个整数T,表示总的测试次数。 
    对于每一种情况:第一行包含一个整数N,其中1 < N < 100,表示三角形的行数。 
    接下来的N行输入表示三角形的每一行的元素Ai,j,其中0 < Ai,j < 100。

    输出

    输出每次测试的最大值并且占一行。

    样例输入
    1 
    5 
    7 
    3 8 
    8 1 0  
    2 7 4 4 
    4 5 2 6 5
    样例输出
    30
     

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
    //freopen("C://Users/Administrator/Desktop/acm.txt","r",stdin);
    int T;
    cin>>T;
    while(T--)
    {
    int N;
    cin>>N;
    int num[N][N];
    for(int i=0;i<N;i++)
    {
    for(int j=0;j<=i;j++)
    cin>>num[i][j];
    }

    int max[N][N];
    memset(max,sizeof(max),0);
    int t=0;int t2=0;
    for(int i=0;i<N;i++)
    {
    max[i][0]=num[i][0]+t;
    t=max[i][0];
    max[i][i]=num[i][i]+t2;
    t2=max[i][i];
    }
    for(int i=0;i<N;i++)
    {
    for(int j=1;j<i;j++)
    {
    max[i][j]=(max[i-1][j-1]>max[i-1][j])?max[i-1][j-1]+num[i][j]:max[i-1][j]+num[i][j];
    }
    }
    int result=max[N-1][0];
    for(int i=0;i<N;i++)if(max[N-1][i]>result)result=max[N-1][i];
    cout<<result<<endl;
    }
    //fclose(stdin);
    return 0;
    }

  • 相关阅读:
    sublime3快捷键汇总
    css3百叶窗轮播图效果
    分页特效
    百度评分标准
    兼容问题汇总
    随机彩票
    js 时间函数 及相关运算大全
    JS贪吃蛇游戏
    《Vim实用技巧》阅读笔记 --- 移动及跳转
    《深入理解Linux网络技术内幕》阅读笔记 --- 路由基本概念
  • 原文地址:https://www.cnblogs.com/linruier/p/8894150.html
Copyright © 2011-2022 走看看