Nu aveti permisiuni pentru a descarca fisierul grader_test18.ok
Cod sursa(job #530391)
| Utilizator | Data | 7 februarie 2011 18:17:51 | |
|---|---|---|---|
| Problema | Ferma | Scor | 40 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.12 kb |
#include <fstream>
#include <algorithm>
using namespace std;
int N, K;
int V[10002], S[10002];
int Smax[2][1002][10002];
int main()
{
ifstream fin("ferma.in");
ofstream fout("ferma.out");
fin >> N >> K;
for (int i = 1; i <= N; ++i)
{
fin >> V[i];
S[i] = S[i - 1] + V[i];
}
for (int i = 1; i <= K; ++i)
{
int maxnow = -S[1];
for (int j = 2; j <= N; ++j)
{
Smax[0][i][j] = max(Smax[0][i][j - 1], maxnow + S[j]);
maxnow = max(maxnow, Smax[0][i - 1][j] - S[j]);
}
}
for (int i = 1; i <= K; ++i)
{
int maxnow = 0;
Smax[1][i][1] = S[1];
for (int j = 2; j <= N; ++j)
{
Smax[1][i][j] = max(Smax[1][i][j - 1], maxnow + S[j]);
maxnow = max(maxnow, Smax[1][i - 1][j] - S[j]);
}
}
int maxnow = 0, result;
for (int i = 1; i < N; ++i)
maxnow = max(maxnow, Smax[1][K][i] - S[i]);
result = maxnow + S[N];
fout << max(result, max(Smax[0][K][N], Smax[1][K][N]));
fin.close();
fout.close();
}
