K - Poor Ramzi
#include<bits/stdc++.h>
using namespace std;
char a[55];
int f[55][55];
int ans;
const int mod=1e9+7;
int len;
int dfs(int l,int r)
{
if(l>=r) return 1;
if(f[l][r]!=0) return f[l][r];
int lsum=0;
for(int i=l; i<r; i++)
{
lsum+=(a[i]-'0');
int rsum=0;
for(int j=r; j>i; j--)
{
rsum+=(a[j]-'0');
if(lsum==rsum)
f[l][r]=(f[l][r]+dfs(i+1,j-1))%mod;
if(rsum>lsum) break;
}
}
f[l][r]=(f[l][r]+1)%mod; // 加上1:[l,r]不作切割的方案数
return f[l][r]%mod;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%s",a+1);
memset(f,0,sizeof(f));
len=strlen(a+1);
ans=dfs(1,len);
printf("%d
",ans%mod);
}
}