P2036PERKET

一.题目描述:

 

 

二.解题思路:

从第1层开始dfs,如果层数已经超过n了则返回,否则每次比较一下当前的苦度和酸度的绝对值,需要注意的是,该层有选择和不选两种情况,所以要进行两条递归。如果比答案小则更新。

三.代码实现:

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 int s1[11],s2[11];
 4 int m = INT_MAX;
 5 int n;
 6 void dfs(int suma,int sumb,int f)
 7 {
 8     if(f > n) return;
 9     if(suma != 1 && sumb != 0)
10         if(fabs(suma - sumb) < m) m = fabs(suma - sumb);
11     dfs(suma * s1[f],sumb + s2[f],f + 1);
12     dfs(suma,sumb,f + 1);
13 }
14 int main()
15 {
16     cin >> n;
17     for(int i = 0;i < n;i++)
18         cin >> s1[i] >> s2[i];
19     dfs(1,0,0);
20     cout << m << endl;
21     return 0;
22 }

 

posted @ 2022-01-09 21:44  scannerkk  阅读(27)  评论(0)    收藏  举报