zoukankan      html  css  js  c++  java
  • SPOJ #453. Sums in a Triangle (tutorial)

    It is a small fun problem to solve. Since only a max sum is required (no need to print path), we can only keep track of the max value at each line. Basically it is still a human labor simulation work. To be more specifically, we need keep track of a line of max sums. 

    But there are 1000*100 input, so special optimization is required. The naive solution would copy data between 2 arrays, and actually that's not necessary. Logically, we only have 2 arrays - result array and working array. After one line is processed, working array can be result array for next line, so we can only switch pointers to these 2 arrays, to avoid expensive memory copy.

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    using namespace std;
    
    int aret[100] = {0};
    int atmp[100] = {0};
    
    int proc_line(int r, int *aret, int *atmp)
    {
    
        if(r == 1)
        {
            int in = 0; cin >>in;
            aret[0] = in;
            atmp[0] = in;
            return in;
        }
    
        //     Get current line and calc
        int rmax = -1;
        for(int i = 0; i < r; i ++)
        {
            int tmp = 0; scanf("%d", &tmp);
            int prevInx = i == 0 ? 0 : i - 1;
            int prevVal = aret[prevInx];
            int currMax = (i + 1) == r ? tmp + prevVal : max(tmp + aret[i], tmp + prevVal);
            atmp[i] = currMax;
            rmax = currMax > rmax ? currMax :rmax;
        }
    
        return rmax;
    }
    
    int main()
    {
    
        int runcnt = 0;
        cin >> runcnt;
        while(runcnt --)
        {
            int rcnt = 0; cin >> rcnt;
            int ret = 0;
            for(int i = 1; i <= rcnt; i ++)
            {
                bool evenCase = i % 2 == 0;
                ret = proc_line(i, !evenCase? aret:atmp, !evenCase?atmp:aret);
            }
            cout << ret << endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    thymeleaf常用属性
    spring的jdbcTemplate的使用
    spring使用thymeleaf
    thymeleaf介绍
    struts2请求过程源码分析
    Git 学习笔记之(三)将本地工程导入到GitHub 仓库中
    spring boot 学习笔记(三)之 配置
    Zookeeper 学习笔记(一)之功能介绍
    Git 学习笔记之(一) 使用 git gui 从github上下载代码
    Linux 清理空间
  • 原文地址:https://www.cnblogs.com/tonix/p/3541392.html
Copyright © 2011-2022 走看看