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]);
}
}
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
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);
}
}
Subscribe to:
Posts (Atom)