狂暴石(计蒜客)

 

 一开始没有想出什么好的办法,因为深度遍历后还要存储太诡异了,看过提示后才知道就用一个数组就可以实现,这给我了一个新的思路关于非重复拆分。

 1 #include<iostream>
 2 #include<stdlib.h>
 3 #include<math.h>
 4 using namespace std;
 5 int a[15][2];
 6 int min_ = 0x3f3f3f3f;
 7 void dfs(int n, int index, int suply, int sum)
 8 {
 9     if(index>1&&index<=n+1)
10     {
11        if(abs(suply-sum)<min_)
12        {
13            min_=abs(suply-sum);
14        }
15     }
16     for(int i=index; i<=n;++i)
17     {
18         if(i==n&&index!=0)
19         {
20            dfs(n,i+1,suply*1,sum);
21         }else if(i<n)
22         {
23             dfs(n,i+1,suply*a[i][0],sum+a[i][1]);
24         }
25     }
26 }
27 int main()
28 {
29     int n;
30     cin>>n;
31     for(int i=0;i<n;++i)
32     {
33         cin>>a[i][0];
34         cin>>a[i][1];
35     }
36     dfs(n,0,1,0);
37     cout<<min_;
38     return 0;
39 }

猜你喜欢

转载自www.cnblogs.com/caxi/p/12535198.html