Pagini recente » Cod sursa (job #2207356) | Cod sursa (job #1090482) | Cod sursa (job #2050708) | Cod sursa (job #1353884) | Cod sursa (job #2238738)
#include <fstream>
#define DIM 10003
using namespace std;
ifstream fin ("ferma.in");
ofstream fout ("ferma.out");
int n,k,i,j,maxi,sol,v[DIM],s[DIM],d[1001][DIM];
int main (){
fin>>n>>k;
for (i=1;i<=n;i++){
fin>>v[i];
s[i] = s[i-1] + v[i];
}
/// d[i][j] - productivitatea maxima daca avem i strangeri din primele j
/// nu tinem cont ca sirul e circular
for (i=1;i<=k;i++){
maxi = d[i-1][i-1] - s[i-1];
for (j=i;j<=n;j++){
d[i][j] = max (d[i][j-1],maxi + s[j]);
maxi = max (maxi, d[i-1][j] - s[j]); /// maxi e negativ
}
}
sol = max (sol,d[k][n]);
/// acum tinem cont ca sirul e circular si luam o secv
/// de la inceput si una de la sfarsit
for (i=1;i<=n;i++)
d[1][i] = max (d[1][i-1],s[i]);
for (i=2;i<=k;i++){
d[i][1] = v[1]; /// incepem cu primul element
maxi = 0;
for (j=2;j<=n;j++){
d[i][j] = max (d[i][j-1],s[j] + maxi);
maxi = max (maxi,d[i-1][j] - s[j]);
}
}
for (i=k;i<=n;i++)
sol = max (sol,d[k][i] + s[n] - s[i]);
fout<<sol;
return 0;
}