#include <iostream>
#include <stdio.h>

#define W 24
using namespace std;

int C[W+1]={0};
int S[W+1]={0};
int d[]={1,5,7,12,20,50};
int N=6;

int main()
{
    int i,j;
    C[0]=0;
    S[0]=0;
    for(i=1;i<=W;i++)
    {
        C[i]=99;
    }

    for(i=0;i<N;i++)
    {
        for(j=1;j<=W;j++)
        {
            if(C[j]>(C[j-d[i]]+1) && d[i]<=j)
            {
                C[j]=C[j-d[i]]+1;
                S[j]=i;
            }
        }

        for(j=1;j<=W;j++)
        {
            printf("%3d",C[j]);
        }
        printf("\n");
        for(j=1;j<=W;j++)
        {
            printf("%3d",S[j]);
        }
        printf("\n\n");
    }

    return 0;
}

==============================================

#include <stdio.h>
#include <string.h>
#include <iostream>
#define M 8
#define N 8

using namespace std;

char S1[M+1];
char S2[N+1];
char C[M+1][N+1]={0};

int main()
{
    int i,j;
    strcpy(&S1[1],"A$CMA*MN");
    strcpy(&S2[1],"AXMC4ANB");
    for(i=1;i<=M;i++)
    {
        for(j=1;j<=N;j++)
        {
            if(S1[i]==S2[j]) C[i][j]=C[i-1][j-1]+1;
            else if(C[i-1][j]>C[i][j-1])
            {
                C[i][j]=C[i-1][j];

            }else
            {
                C[i][j]=C[i][j-1];
            }
        }
    }

    for(i=1;i<=M;i++)
    {
        for(j=1;j<=N;j++)
        {
            printf("%3d",C[i][j]);
        }
        printf("\n");
    }


    return 0;
}