码迷,mamicode.com
首页 > 其他好文 > 详细

xorequation(DFS完全枚举)

时间:2018-10-12 13:51:57      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:递归   题目   完全   \n   har   ...   print   size   string   

题目

有一个含有N个未知数的方程如下:

x1^x2^...^xn= V,给定N,V,再给定正整数a1,a2,...an满足1≤ai≤9且∏Ni=1(ai+1)  ≤ 32768,请输出所有满足0≤xi≤ai的解。

思路

枚举每个xi的取值,显然,写成N个循环肯定可以,但不如递归简洁。

复杂度

递归的写法复杂度不那么明显,其实和多重循环的复杂度一样,共有∏Ni=1(ai+1)种状态,每种状态输出结果,所以为O(N x ∏Ni=1(ai+1))

代码实现

 1 #include<stdio.h>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 
 6 const int maxn = 36 + 10;
 7 int N, V,a[maxn];
 8 char s[maxn];
 9 char ans[32768][maxn];
10 int ans_cnt = 0;
11 
12 void dfs(int cur,int v)
13 {
14     if (cur == N)
15     {
16         if (v == V)
17             strcpy(ans[ans_cnt++], s);   //把答案存起来
18         return;
19     }
20     for (int i = 0; i <= a[cur]; i++)
21     {
22         s[2 * cur] = i + 0;
23         if (cur != 0)  s[2 * cur - 1] = ^;
24         dfs(cur + 1, v ^ i);
25     }
26 }
27 
28 int main()
29 {
30     scanf("%d%d", &N, &V);
31     for (int i = 0; i < N; i++)
32         scanf("%d", &a[i]);
33     dfs(0, 0);
34     printf("%d\n", ans_cnt);
35     for (int i = 0; i < ans_cnt; i++)
36         printf("%s=%d\n", ans[i], V);
37 }

 

xorequation(DFS完全枚举)

标签:递归   题目   完全   \n   har   ...   print   size   string   

原文地址:https://www.cnblogs.com/lfri/p/9777276.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!