Pages

Showing posts with label dynamic programming. Show all posts
Showing posts with label dynamic programming. Show all posts

Tuesday, September 8, 2009

Euler Problem 31 solution

Time (s): ~0.001
package margusmartseppcode.From_30_to_39;

public class Problem_31 {
 public static void main(String[] args) {
  int target = 200, coins[] = { 1, 2, 5, 10, 20, 50, 100, 200 };
  int ways[] = new int[target + 1];
  ways[0] = 1;

  for (int coin : coins)
   for (int i = coin; i < target + 1; i++)
    ways[i] += ways[i - coin];

  System.out.println(ways[target]);
 }
}

Euler Problem 21 solution

Time (s): ~0.022
package margusmartseppcode.From_20_to_29;

public class Problem_21 {
 static int size = 10000;
 static int memcard[] = new int[size * 3];

 static int getSoPD(int nr) {
  if (memcard[nr] != 0)
   return memcard[nr];

  int sum = 1;
  for (int i = 2; i * i <= nr; i++)
   if (nr % i == 0)
    sum = sum + i + nr / i;

  return memcard[nr] = sum;
 }

 public static void main(String[] args) {
  int sum = 0, b;

  for (int i = 2; i < size; i++)
   if (((b = getSoPD(i)) > i) && (getSoPD(b) == i))
    sum += b + i;

  System.out.println(sum);
 }
}

Euler Problem 18 solution

Time (s): ~0.001
package margusmartseppcode.From_10_to_19;

public class Problem_18 {

 static int nrs[][] = { { 75 }, { 95, 64 }, { 17, 47, 82 },
   { 18, 35, 87, 10 }, { 20, 04, 82, 47, 65 },
   { 19, 01, 23, 75, 03, 34 }, { 88, 02, 77, 73, 07, 63, 67 },
   { 99, 65, 04, 28, 06, 16, 70, 92 },
   { 41, 41, 26, 56, 83, 40, 80, 70, 33 },
   { 41, 48, 72, 33, 47, 32, 37, 16, 94, 29 },
   { 53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14 },
   { 70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57 },
   { 91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48 },
   { 63, 66, 04, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31 },
   { 04, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 04, 23 } };

 public static void main(String[] args) {
  for (int i = nrs.length - 2; i >= 0; i--)
   for (int j = 0; j < nrs[i].length; j++)
    nrs[i][j] += Math.max(nrs[i + 1][j], nrs[i + 1][j + 1]);

  System.out.println(nrs[0][0]);
 }
}

Euler Problem 14 solution

Time (s): ~0.355
package margusmartseppcode.From_10_to_19;

public class Problem_14 {
 static final int maxSize = 1000000;
 static long d[] = new long[maxSize];
 static {
  d[1] = 1;
 }

 static long makeChain(long nr) {
  if (nr >= maxSize)
   return makeChain(nr % 2 == 0 ? nr / 2 : 3 * nr + 1) + 1;
  else if (d[(int) nr] == 0)
   d[(int) nr] = makeChain(nr % 2 == 0 ? nr / 2 : 3 * nr + 1) + 1;

  return d[(int) nr];
 }

 public static void main(String[] args) {
  int maxNr = 0;
  long maxLen = 0;

  for (int i = 1; i < 1000000; i++) {
   if (makeChain(i) > maxLen) {
    maxNr = i;
    maxLen = d[i];
   }
  }

  System.out.println(maxNr);
 }
}