Pagini recente » Cod sursa (job #2704637) | Cod sursa (job #1403521) | Cod sursa (job #2545919) | Cod sursa (job #1321916) | Cod sursa (job #742051)
Cod sursa(job #742051)
// http://infoarena.ro/problema/buline
#include <stdio.h>
#include <malloc.h>
int main(int argc, char* argv[])
{
long N;
int *v, **dp, maxx, kp = 0, pp = 0, i, j, k;
FILE *f = fopen("buline.in", "r");
fscanf(f, "%d", &N);
v = (int*) malloc(N * 2 * sizeof(int));
dp = (int**)malloc(N * sizeof(int*));
int semn;
for (i = 0; i < N; ++i)
{
dp[i] = (int*)malloc(N * sizeof(int));
fscanf(f, "%d %d", &v[i], &semn);
if(semn == 0) v[i] *= -1;
v[i+N] = v[i];
dp[i][0] = v[i];
}
maxx = v[0];
fclose(f);
for(k = 0; k < N; ++k)
{
for (i = k + 1; i < N + k; ++i)
{
j = i - k;
if(dp[k][j-1] > 0)
{
dp[k][j] = dp[k][j-1] + v[i];
if(maxx < dp[k][j])
{
maxx = dp[k][j];
kp = k;
pp = j;
}
}
else
{
dp[k][j] = v[i];
if(maxx < dp[k][j])
{
maxx = dp[k][i];
kp = k;
pp = j;
}
}
}
}
k = 1;
while(true)
{
if(pp != 0 && dp[kp][pp] - v[kp+pp] != dp[kp][pp-1]) break;
pp--;
k++;
}
f = fopen("buline.out", "w");
fprintf(f, "%d %d %d", maxx, pp + 1, k);
fclose(f);
return 0;
}