Problem31

/*
 * \file   problem031.cpp
 * \brief  Projece Euler - Problem31
 *
 * \author Takushi Homma (b1006018@fun.ac.jp)
 */
#include <iostream>
using namespace std;

#define LMT 200

int
main(int argc, char **argv)
{
    int coins[8] = {1, 2, 5, 10, 20, 50, 100, 200};
    int ways[LMT+1];
    memset(ways, 0, (LMT+1)*sizeof(int));
    ways[0] = 1;

    for (unsigned int i_c = 0; i_c < sizeof(coins)/sizeof(int); i_c++)
    {
        for (int i_w = coins[i_c]; i_w <= LMT; i_w++)
        {
            ways[i_w] += ways[i_w-coins[i_c]];
        }
    }

    cout << ways[LMT] << endl;

    return 0;
}