hdu2152 Fruit(母函数)

import java.util.Scanner;

 

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner cin = new Scanner(System.in);
        int N, M;
        while(cin.hasNext()) {
            N = cin.nextInt();
            M = cin.nextInt();
            int i, sum = 0;
            for(i = 0; i < N; i++) {
                fruit[i][0] = cin.nextInt();
                fruit[i][1] = cin.nextInt();
                sum += fruit[i][1];
            }
            genfun(N, M, sum);
            System.out.println(c1[M]);
        }
    }
   
    public static void genfun(final int n, final int m, final int sum) {
        int i, j, k;
        for(i = 0; i <= m; i++) {
            c1[i] = 0;
            c2[i] = 0;
        }
        c1[0] = 1;
       
        for(i = 0; i < n; i++) {
            for(j = 0; j <= sum; j++) {
                for(k = fruit[i][0]; (k + j <= m) && (k <= fruit[i][1]); k++) {
                    c2[k + j] += c1[j];
                }
            }
            for(j = 0; j <= sum; j++) {
                c1[j] = c2[j];
                c2[j] = 0;
            }
        }
    }
   
    final static int[] c1;
    final static int[] c2;
    final static int[][] fruit;
   
    static {
        c1 = new int[10001];
        c2 = new int[10001];
        fruit = new int[101][2];
    }
   
}

posted @ 2010-10-15 15:59  菜到不得鸟  阅读(174)  评论(0)    收藏  举报