题目链接:https://www.jisuanke.com/course/615/28151
题目大意:求解多少满足方程的解
题目思路:数据量较小直接dfs
坑点:用pow居然会超时,所以要新建一个mypow数组,对数据进行预处理。
学到的东西:pow函数速度非常慢,必要条件下可以进行相应的预处理。
代码:
#include <bits/stdc++.h>
using namespace std;
int n,M;
int k[5],p[5];
int mypow[160][5];
int ans=0;
void init()
{
memset(mypow,1,sizeof(mypow));
for(int i=1;i<=150;i++)
for(int j=1;j<=4;j++)
mypow[i][j]=i*mypow[i][j-1];
}
void dfs(int num,int mark)//dfs的过程
{
if(num!=0&&num!=n&&mark==0) return ;//这一步可以省略
if(num==n){
if(mark==0) ans++;
return ;
}
for(int i=1;i<=M;i++){
dfs(num+1,mark+k[num]*mypow[i][p[num]]);
}
}
int main()
{
cin>>n;
cin>>M;
init();
for(int i=0;i<n;i++)
cin>>k[i]>>p[i];
dfs(0,0);
printf("%d\n",ans);
}