UVA 11375 Matches
白书上的例题,实际上就是一个背包问题,不过要注意高精度问题,上java就没问题了。
import java.io.*; import java.math.*; import java.util.*; public class Main { public static void main(String args[]) { Scanner in = new Scanner(System.in); int n; BigInteger d[] = new BigInteger[2010]; int c[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6}; for(int i = 0; i <= 2000; i++) { d[i] = BigInteger.ZERO; } d[0] = BigInteger.ONE; for(int i = 0; i <= 2000; i++) { for(int j = 0; j < 10; j++) { if(!(i == 0 && j == 0) && i + c[j] <= 2000) { d[i+c[j]] = d[i+c[j]].add(d[i]); } } } BigInteger ans[] = new BigInteger[2010]; ans[0] = BigInteger.ZERO; for(int i = 1; i <= 2000; i++) ans[i] = ans[i-1].add(d[i]); while(in.hasNext()) { n = in.nextInt(); if(n >= 6) System.out.println(ans[n].add(BigInteger.ONE)); else System.out.println(ans[n]); } } }