计蒜客 方程的解数 dfs

题目:

https://www.jisuanke.com/course/2291/182237

思路:

    来自:https://blog.csdn.net/qq_29980371/article/details/76599695

dfs(int cnt, int curVal)//cnt是k,p的下标,curVal当前的和值
从1到m遍历进入dfs,然后不停dfs,进行查找,满足条件将结果加一,cnt临界就跳出循环,

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<queue>
 6 using namespace std;
 7 //计蒜客 方程的解数
 8 int n, m, k[5], p[5], sum;
 9 int poww[151][5];
10 void init()
11 {
12     //memset(poww, 1, sizeof(poww));
13     for (int i = 0; i <= 150; i++)
14         poww[i][0] = 1;
15     for (int i = 1; i <= 150; i++)
16     {
17         for (int j = 1; j <= 4; j++)
18         {
19             poww[i][j] = i*poww[i][j - 1];
20         }
21     }
22 }
23 
24 void dfs(int cnt, int curVal)//cnt是k,p的下标,curVal当前的和值 
25 {
26     if (cnt == n  && curVal == 0)//满足方程式,sum++ 
27     {
28         sum++;
29         return;
30     }
31     if (cnt == n )//跳出循环 
32         return;
33     for (int i = 1; i <= m; i++)
34     {
35         dfs(cnt + 1, curVal + k[cnt] * poww[i][p[cnt]]);
36     }
37 }
38 
39 int main()
40 {
41     while (scanf("%d%d", &n, &m) == 2)
42     {
43         for (int i = 0; i<n; i++)
44             scanf("%d%d", &k[i], &p[i]);
45 
46         sum = 0;
47         init();
48         dfs(0, 0);
49         printf("%d\n", sum);
50     }
51     return 0;
52 }

 

转载于:https://www.cnblogs.com/fudanxi/p/10617630.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值