hdu 2079(简单母函数)

import java.util.Arrays;
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 T = cin.nextInt();
       
        while(T-- > 0) {
            n = cin.nextInt();
            m = cin.nextInt();
            sum = 0;
            for(int i = 0; i < m; i++) {
                score[i] = cin.nextInt();
                num[i] = cin.nextInt();
                sum += score[i] * num[i];
            }
            genFun();
            System.out.println(c1[n]);
        }
    }
   
    public static void genFun() {
        Arrays.fill(c1, 0);
        Arrays.fill(c2, 0);
        c1[0] = 1;
       
        int i, j, k;
        for(i = 0; i < m; i++) {
            for(j = 0; j <= sum; j++ ) {
                for(k = 0; (j + k * score[i] <= sum) && (k <= num[i]); k++) {
                    c2[j + k * score[i]] += c1[j];
                }
            }
            for(j = 0; j <= sum; j++) {
                c1[j] = c2[j];
                c2[j] = 0;
            }
        }
    }
   
    static int n, m, sum;
    final static int[] c1, c2;
    final static int[] score, num;
   
    static {
        c1 = new int[650];
        c2 = new int[650];
        score = new int[10];
        num = new int[10];
    }
}

posted @ 2010-10-22 00:51  菜到不得鸟  阅读(293)  评论(0)    收藏  举报