Description
近期小Y迷上了数学,总是在思考各种数学问题。有一天,他不小心把墨水洒在草稿纸上。他如今能看到的是“2?3?1?4”(?表示看不清的地方)。小Y的记忆力不错,他知道: 1、每一个?仅仅会是“+”、“-”,“=”三个符号之中的一个。 2、总共同拥有且仅有一个“=”。 3、原式一定是一个等式。如“2+3-1=4” 如今他突然想知道,有多少种可能性,满足上面3个要求。
Input
多组输入。 每组第一行有一个数字n。表示小Y从左到右,一共能够看到n个数字。(2<=n<=15) 每组第二行有n个数字。分别表示这n个数字是什么。保证每一个数字都是非负整数,且小于10^7。
Output
对于每组,输出一行,这一行仅仅有一个数字,表示有多少种可能性满足题意。
Sample Input
4 2 3 1 4 4 1 1 1 1
Sample Output
2 6
#include<stdio.h> int map[30],n,ans; void DFS(int sum,int count,int count1) //count1记录的是等式的减号,有多少个减号就有多少种=号可以达到目标 { if(count>n) return; if(sum==0&&count==n) ans+=count1; DFS(sum+map[count],count+1,count1); DFS(sum-map[count],count+1,count1+1); } int main() { while(scanf("%d",&n)!=EOF) { ans=0; for(int i=0;i<n;i++) scanf("%d",&map[i]); DFS(map[0],1,0); printf("%d\n",ans); } }