题意:
给你一串数字,你可以在数字之间添加一个“=”以及若干“+”号。问你问你有多少种合法的放法。
题解:
直接暴力枚举,枚举所有出加法,和合并的值。然后一个一个匹配。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
string s,ed="END";
int len,ans=0;
int d[20],c[20],num[20];
void dfs(int pos){
int ret,cnt;
if(pos>len) return ;
if(pos==len-1){
cnt=ret=0;
c[0]=0;
for(int i=0;i<len;++i){
ret=ret*10+num[i];
if(d[i]){
c[++cnt]=c[cnt-1]+ret;
ret=0;
}
}
if(ret) c[++cnt]=c[cnt-1]+ret;
for(int i=1;i<cnt;++i){
if(c[i]==c[cnt]-c[i])
ans++;
}
}
d[pos]=1;
dfs(pos+1);
d[pos]=0;
dfs(pos+1);
}
int main(){
while(cin>>s){
if(s==ed) break;
len=s.size();
ans=0;
for(int i=0;i<len;++i)
num[i]=s[i]-'0';
dfs(0);
printf("%d\n",ans);
}
return 0;
}