这是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;
}