zoukankan      html  css  js  c++  java
  • USACO 2.3 ;零的数列

    题目:https://www.luogu.org/problemnew/show/P1473

    一开始上手dfs没什么思路,硬刚了一会儿才刚出来我真是太菜了orz

    dfs(pos,cur,v,c),用cur表示当前和,v表示上一位

    为什么要表示上一位的和呢?因为如果有“ ” ,是要由上一位×10再加当前位得到这个数

    cal表示前一位的运算符,也是同理

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    inline int read()
    {
      int ans = 0,op = 1;
      char ch = getchar();
      while(ch < '0' || ch > '9')
        {
          if(ch == '-') op = -1;
          ch = getchar();
        }
      while(ch >= '0' && ch <= '9')
        {
          (ans *= 10) += ch - '0';
          ch = getchar();
        }
      return ans * op;
    }
    char ans[10];
    int n;
    int a[10];
    void dfs(int pos,int cur,int v,char cal)
    {
      if(pos == n + 1)
        {
          if(cal == '-') cur -= v;
          if(cal == '+') cur += v;
          if(cur) return;
          cout << 1;
          for(int i = 1;i <= n;i++) cout << ans[i] << a[i];
          cout << endl;
          return;
        }
      ans[pos] = ' ';
      dfs(pos + 1,cur,v * 10 + a[pos],cal);
      ans[pos] = '+';
      if(cal == '+') dfs(pos + 1,cur + v,a[pos],ans[pos]);
      else dfs(pos + 1,cur - v,a[pos],ans[pos]);
      ans[pos] = '-';
      if(cal == '+') dfs(pos + 1,cur + v,a[pos],ans[pos]);
      else dfs(pos + 1,cur - v,a[pos],ans[pos]);             
    }            
    int main()
    {
      n = read();
      n--;
      for(int i = 1;i <= n;i++) a[i] = i + 1;
      dfs(1,0,1,'+');
      return 0;
    }
  • 相关阅读:
    Netsharp下微信菜单以及OAuth
    权限管理
    java面向对象基础(转)
    闲来无事做了一个批处理的win10账号管理
    bat获取系统时间修改系统密码
    bat常用命令
    bat修改密码
    vbs的一些入门基础。。。
    WCF 之 DataContract
    WCF 之 OperationContract
  • 原文地址:https://www.cnblogs.com/LM-LBG/p/9984768.html
Copyright © 2011-2022 走看看