三角形数组的最大路径和

这是Project Euler的第18题,需要维护一个当前行的最大路径和数组。

#include<vector>
#include<fstream>
#include<string>
#include<iostream>
#include<algorithm>
#include<boost/algorithm/string.hpp>
using namespace std;

int main(){
    ifstream inf;
    inf.open("data.txt");
    string s;
    vector<vector<int>> data(15);
    int i=0;
    while (getline(inf, s))
    {
        vector<string> tvs;
        boost::split(tvs,s,boost::is_any_of(" "),boost::token_compress_on);
        for(auto ts:tvs){
            data[i].emplace_back(stoi(ts));
        }
        i++;
    }
    vector<int> res;
    vector<int> temp_res;
    for(int i =0;i<data.size();i++){
        if(i==0){
            res.emplace_back(data[i][0]);
            continue;
        }
        for(int j=0;j<data[i].size();j++){
            int temp;
            if(j==0) {
                temp = data[i][j]+res[j];
                temp_res.emplace_back(temp);
                continue;
            }
            if(j==data[i].size()-1){
                temp = data[i][j]+res[j-1];
                temp_res.emplace_back(temp);
                continue;
            }
            temp = data[i][j]+ max(res[j],res[j-1]);
            temp_res.emplace_back(temp);
        }
        res = temp_res;
        temp_res.clear();
    }
    cout<< *max_element(res.begin(),res.end())<<endl;
    return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值