Pagini recente » Cod sursa (job #2133340) | Cod sursa (job #3178656) | Cod sursa (job #376545) | Cod sursa (job #2617403) | Cod sursa (job #2433487)
#include <fstream>
#include <vector>
using namespace std;
template < class T>
class Pair {
T first;
T second;
public:
Pair() {};
Pair(T const& x, T const& y) {
first = x;
second = y;
}
Pair(Pair<T> const& cp) {
first = cp.getFirst();
second = cp.getSecond();
}
T const getFirst() const {
return first;
}
T const getSecond() const {
return second;
}
};
class Solution {
int n;
vector<int> v;
int index[4];
Pair<int> indexSol;
public:
void readData() {
ifstream f("ssm.in");
f >> n;
v.resize(n);
for (int i = 0; i < n; ++i) {
f >> v[i];
}
}
int SSM() {
int dp[4]; // vector cu n + 1 elemente (indexarea incepe de la 0)
// am nevoie de dp[1], ..., dp[n]
// caz de baza
dp[0] = v[0];
index[0] = 1;
int sol = dp[0];
indexSol = Pair<int>(index[1], 1);
// caz general
for (int i = 1; i < n; ++i) {
if (dp[(i - 1) % 3] >= 0) {
// extinde la dreapta cu v[i]
dp[i % 3] = dp[(i - 1) % 3] + v[i];
index[i % 3] = index[(i-1) % 3];
}
else {
// incep o noua secventa
dp[i % 3] = v[i];
index[i % 3] = i + 1;
}
if (dp[i % 3] > sol) {
sol = dp[i % 3];
indexSol = Pair<int>(index[i % 3], i + 1);
}
}
return sol; // aceasta este suma asociata cu SSM
}
void print() {
ofstream g("ssm.out");
int ans = SSM();
g << ans << ' ' << indexSol.getFirst() << ' ' << indexSol.getSecond() << '\n';
g.close();
}
};
int main() {
Solution sol;
sol.readData();
sol.print();
}