经过计算最大力距为3750,所以以3750作为力距为零的点,然后DP就可以了
#include<stdio.h>
#include<string.h>
int dp[30][8000];//dp[i][j]代表挂上i个砝码之后总力距为j的方案数;
int w[30];
int p[30];
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++) scanf("%d",&p[i]);
for(int i=0;i<m;i++) scanf("%d",&w[i]);
for(int i=0;i<n;i++) dp[1][w[0]*p[i]+3750]++;
for(int i=1;i<m;i++){
for(int j=0;j<n;j++){
for(int k=0;k<=7500;k++){
if(dp[i][k]!=0){
dp[i+1][k+w[i]*p[j]]+=dp[i][k];//状态转移方程;
}
}
}
}
printf("%d\n",dp[m][3750]);
}
return 0;
}