UVA-112
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <cctype> #include <algorithm> // #define DEBUG //可注释 #ifndef DEBUG #include <fstream> #define cout __f std::ofstream __f("E:/out.txt",std::ios::out); #endif using namespace std; int n; string s; char p[1000]; bool f(int s1,int s2,int x){ //到达叶子才可以判断,左右子树都是空才是叶子 if(s.substr(s1,s2-s1)=="()") return false; //可能不仅仅是一位数 int j; for(j=s1+1;isdigit(s[j])||s[j]=='-'||s[j]=='+';j++); int p=atoi(s.substr(s1+1,j-s1-1).c_str()),num=0,i; if(s.substr(j,s2-j-1)=="()()"){ if(x+p==n) return true; else return false; } for(i=j;i<s2;i++){ if(s[i]=='(') num++; else if(s[i]==')') num--; if(num==0) break; } if(!f(j,i+1,x+p)&&!f(i+1,s2-1,x+p)) return false; else return true; } int main(){ char c; int num=0; while (cin>>n) { num=0; s.clear(); do { cin>>c; if(c=='(') num++; else if(c==')') num--; s.push_back(c); }while (num!=0); if(f(0,s.length(),0)) cout<<"yes\n"; else cout<<"no\n"; } return 0; }