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
  • 相关阅读:
    在线学习VIM
    对三叉搜索树的理解
    Suffix Tree
    Skip list
    中文分词算法
    土豆的seo
    Gentle.NET文档(链接)
    a标签的link、visited、hover、active的顺序
    html dl dt dd标签元素语法结构与使用
    WEBZIP为什么打不开网页
  • 原文地址:https://www.cnblogs.com/tonix/p/3541392.html
Copyright © 2011-2022 走看看