http://acm.hdu.edu.cn/showproblem.php?pid=2079
#include <stdio.h>
#include <string.h>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include<queue>
#include<stack>
using namespace std;
int a[100],b[100],c1[100],c2[100];
int main()
{
int T,n,m;
cin>>T;
while(T--)
{
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i]>>b[i];
}
for(int i=0;i<=n&&i<=a[1]*b[1];i+=a[1])
{
c1[i]=1;
}
for(int i=2;i<=m;i++)
{
for(int j=0;j<=n;j++)
{
for(int k=0;k<=n&&k<=a[i]*b[i];k+=a[i])
{
c2[j+k]+=c1[j];
}
}
memcpy(c1,c2,sizeof(c1));
memset(c2,0,sizeof(c2));
}
printf("%d\n",c1[n]);
}
return 0;
}