Sleep, Eat, Programme, Math
#include<iostream>;
using namespace std;
struct TParent
{
int i, j;
};
int i, j, k, n, a, b, maxans, maxi;
int t[1005][1005];
int m[1005], p[1005];
TParent par[1005][1005];
void rec(int i, int j)
{
if (i == 1)
{
printf("%i ", p[j]);
return;
}
rec(par[i][j].i, par[i][j].j);
printf("%i ", p[j] - p[i - 1]);
}
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
scanf("%d%d%d", &n, &a, &b);
for(i = 1; i <= n; i++)
{
scanf("%i", &m[i]);
if (m[i] > b)
{
printf("0";
fclose(stdin);
fclose(stdout);
return 0;
}
}
p[0] = 0;
for (i = 1; i <= n; i++)
{
p[i] = p[i - 1] + m[i];
}
t[1][1] = 1;
par[1][1].i = 1;
par[1][1].j = 1;
for (i = 1; i <= n; i++)
{
for (j = i; j <= n; j++)
{
if (!(t[i][j])) continue;
if((j < n) && (p[j + 1] - p[i - 1] <= b))
{
t[i][j + 1] = t[i][j];
par[i][j + 1].i = par[i][j].i;
par[i][j + 1].j = par[i][j].j;
}
if ((j < n) && (p[j] - p[i - 1] <= b) && (p[j] - p[i - 1] >=a) && (p[n] - p[j] >= a))
{
t[j + 1][j + 1] = t[i][j] + 1;
par[j + 1][j + 1].i = i;
par[j + 1][j + 1].j = j;
}
}
}
maxans = 0;
for (i = 1; i <= n; i++)
{
if (t[i][n] > maxans)
{
maxans = t[i][n];
maxi = i;
}
}
if (maxans == 1)
{
if ((p[n] < a) || (p[n] > b))
{
maxans = 0;
}
}
printf("%d\n", maxans);
if (!(maxans))
{
fclose(stdin);
fclose(stdout);
return 0;
}
rec(maxi, n);
fclose(stdin);
fclose(stdout);
return 0;
}
на самом деле, я нечайно
вроде как надо ставить тег < pre >
Проверка тега <code>
Проверка тега <code>
--- )
©
====}
[©>
то что придумывалось с трудо должно и пониматься с трудом