样例输入:
3
100
1 2
-1 2
1 2
样例输出
104
题解:
采用暴力的思想,枚举每一个 x 所有可能的值, 然后进行判断是否计算结果为 0。注意预处理,否则会超时。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,ans;
int k[10],p[10];
ll x[10][150];
void dfs(int ind,ll s){
if(ind>n) return;
if(ind==n){//递归出口
if(s==0){//查计算结果是否为0
ans++;
}
return;
}
for(int i=1;i<=m;i++){//枚举解
dfs(ind+1,s+x[ind][i]);
}
}
int main(){
cin>>n;
cin>>m;
for(int i=0;i<n;i++){
cin>>k[i]>>p[i];
for(int j=1;j<=m;j++){
x[i][j]=k[i]*pow(j,p[i]);//预处理
}
}
dfs(0,0);
cout<<ans<<endl;
return 0;
}