zoukankan      html  css  js  c++  java
  • xorequation(DFS完全枚举)

    题目

    有一个含有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
    ", ans_cnt);
    35     for (int i = 0; i < ans_cnt; i++)
    36         printf("%s=%d
    ", ans[i], V);
    37 }
  • 相关阅读:
    My SqL 常用命令
    RGB颜色查询对照表
    Android 对话框(Dialog)大全
    【转】Android一些知识点汇总
    Google Maps API v2密钥申请
    蓝牙中文API文档
    IOS 电商类app 第一版架构 改进
    ios 开发小记 (四)
    ios 深度复制 copy & mutablecopy
    CCS绘制成的三角形箭头
  • 原文地址:https://www.cnblogs.com/lfri/p/9777276.html
Copyright © 2011-2022 走看看