• 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 }
  • 相关阅读:
    Snmpwalk
    本地使用PostMan测试接口没有问题,但是线上直接进不了接口
    redis使用注意事项
    线程笔记
    springboot笔记
    springboot中多个地址指向同一个方法
    开发过程中遇到的注解
    使用maven时用到的一些问题
    遇到线程安全问题的案例
    mongodb
  • 原文地址:https://www.cnblogs.com/lfri/p/9777276.html
Copyright © 2020-2023  润新知