Pagini recente » Cod sursa (job #318871) | Cod sursa (job #1301102) | Cod sursa (job #3216117) | Cod sursa (job #1088733) | Cod sursa (job #20868)
Cod sursa(job #20868)
#include <stdio.h>
#include <string.h>
#include <memory.h>
#define NMAX 267
#define KMAX 520
typedef struct cuv
{
char c[NMAX];
};
cuv p[NMAX][NMAX];
int a[NMAX][KMAX];
int len[NMAX][NMAX];
int n, k;
int nr[NMAX];
int conf[NMAX], h;
void read()
{
int i, j;
char linie[NMAX];
int last;
scanf("%d %d\n", &n, &k);
for(i = 0; i < n; ++i)
{
fgets(linie, NMAX, stdin);
last = 0;
nr[i] = 1;
for(j = 0; linie[j] != '\n'; ++j)
{
if(linie[j] == ' ')
{
p[i][nr[i]].c[last] = '\0';
if(i != 0 )
++len[i][nr[i]];
len[i][nr[i]++] += last;
last = 0;
}
else
p[i][nr[i]].c[last++] = linie[j];
}
p[i][nr[i]].c[last] = '\0';
if(i != 0)
++len[i][nr[i]];
len[i][nr[i]++] = last;
}
}
void print_p()
{
int i, j;
for(i = 0; i < n; ++i)
{
for(j = 0; j < nr[i]; ++j)
{
fputs(p[i][j].c, stdout);
printf(" %d ", len[i][j]);
}
printf("\n");
}
}
void dinamic()
{
int c1[KMAX], c2[KMAX];
int i, j, k;
int next;
for(i = 1, c1[0] = 0; i < nr[0]; ++i)
{
if(len[0][i] < KMAX)
{
if(!a[0][len[0][i]])
{
a[0][len[0][i]] = i;
c1[++c1[0]] = len[0][i];
}
}
}
for(i = 1, c2[0] = 0; i < n; ++i)
{
for(j = 1; j < nr[i]; ++j)
{
for(k = 1; k <= c1[0]; ++k)
{
next = len[i][j] + c1[k];
if(next < KMAX && !a[i][next])
{
a[i][next] = j;
c2[++c2[0]] = next;
}
}
}
memcpy(c1, c2, sizeof(c2));
c2[0] = 0;
}
}
void print_a()
{
int i, j;
for(i = 0; i < n; ++i)
{
for(j = 0; j <= k; ++j)
printf("%d ", a[i][j]);
printf("\n");
}
printf("\n");
}
void print_len()
{
int i, j;
for(i = 0; i < n; ++i)
{
for(j = 1; j <= k; ++j)
printf("%d ", len[i][j]);
printf("\n");
}
printf("\n");
}
void afisare(int i, int j)
{
if(i != -1)
{
afisare(i-1, j - len[i][ a[i][j] ]);
conf[h++] = a[i][j];
}
}
void write()
{
int i;
for(i = 0; i < h; ++i)
{
printf("%s ", p[i][conf[i]].c);
}
printf("\n");
}
int main()
{
freopen("prop.in", "r", stdin);
freopen("prop.out", "w", stdout);
read();
dinamic();
//print_a();
//print_len();
if(a[n-1][k])
{
afisare(n-1, k);
write();
}
else
printf("0\n");
fclose(stdin);
fclose(stdout);
return 0;
}