#include<cstdlib>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<set>
#include<cstring>
#include <algorithm>
#define N 105
#define MIN 1e-11
#define M 32010
#define MM 70000
using namespace std;
int a[N];
int s[N];
int v[N][MM];//MM粗心忘了,wa!!!
int t,goal,n;
char map[5]= {'+','+','-','*','/'};
int flag;
int dfs(int k,int cur)
{
if(k==n)
{
if(cur==goal)
{
printf("%d",a[0]);
for(int i=1; i<n; i++)
{
printf("%c%d",map[s[i]],a[i]);
}
printf("=%d\n",goal);
flag=0;
return 1;
}
return 0;
}
int temp=cur+a[k];
if(temp<=M&&!v[k][temp+M])//&&temp>=-M
{
v[k][temp+M]=1;
s[k]=1;
if(dfs(k+1,temp))
return 1;
}
temp=cur-a[k];
if(temp>=-M&&!v[k][temp+M])//temp<=M&&
{
v[k][temp+M]=1;
s[k]=2;
if(dfs(k+1,temp))
return 1;
}
temp=cur*a[k];
if(temp<=M&&temp>=-M&&!v[k][temp+M])
{
v[k][temp+M]=1;
s[k]=3;
if(dfs(k+1,temp))
return 1;
}
if(a[k]&&!(cur%a[k]))//
{
temp=cur/a[k];
if(temp<=M&&temp>=-M&&!v[k][temp+M])//
{
v[k][temp+M]=1;
s[k]=4;
if(dfs(k+1,temp))
return 1;
}
}
return 0;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ex.in","r",stdin);
#endif
scanf("%d",&t);
while(t--)
{
memset(v,0,sizeof(v));
flag=1;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
scanf("%d",&goal);
dfs(1,a[0]);
if(flag)
printf("NO EXPRESSION\n");
}
return 0;
}
10400 - Game Show Math------水题
最新推荐文章于 2023-12-22 02:23:09 发布