#include #include #include #include #define MAX 91 #define NO -1 int nkeys, nletters; char keyname[MAX+1]; char letname[MAX+1]; int freq[MAX]; int min[MAX][MAX]; int how[MAX][MAX]; int cost[MAX][MAX]; int posit[MAX]; void debug (void) { int i, j; printf("Nletters: %d Nkeys: %d\n", nletters, nkeys); printf("Min:\n"); for (i=0; i=0; pos++) if (min[i-1][j-pos]!=NO) { tmp=min[i-1][j-pos]+cost[j-pos+1][j]; if (min[i][j]==NO || tmp<=min[i][j]) { min[i][j]=tmp; how[i][j]=pos; } } } b=nletters-1; for (a=nkeys-1; a>=0; a--) { for (i=b-how[a][b]+1; i<=b; i++) posit[i]=a; b=b-how[a][b]; } } void write_output(void) { int i, j; j=0; for (i=0; i