You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# include <bits/stdc++.h>
using namespace std ;
//https://www.luogu.com.cn/problem/P2036
//定义长长整为ll,用着方便
typedef long long ll ;
//结构体:配料
struct ingredient {
ll S ; //酸度
ll B ; //甜度
} x [ 11 ] ; //配料数最多是10个, 就算是把0不要了, 11个也足够了
int n ;
ll ans = 10000001 ; //酸度和甜度的最小的绝对差
ll S_RESULT = 1 ; //酸度乘法结果
ll B_RESULT = 0 ; //甜度加法结果
//深度优先搜索
void dfs ( int i ) {
//并不是到n停止, 注意一下,要到4号小箱子啊!
if ( i = = n + 1 ) {
//如果一个都没选就不存最小值, 否则会出现ans=0的情况
if ( S_RESULT = = 1 & & B_RESULT = = 0 ) {
return ;
}
//本轮走到头与其它各轮次的结果对比,哪个小就保留哪个
ans = min ( ans , abs ( S_RESULT - B_RESULT ) ) ;
return ;
}
//如果本轮要x[i]这种配料
S_RESULT * = x [ i ] . S ; //酸度乘法结果
B_RESULT + = x [ i ] . B ; //甜度加法结果
//探索下一个配料!
dfs ( i + 1 ) ;
//如果本轮不要x[i]这种配料
S_RESULT / = x [ i ] . S ; //回溯
B_RESULT - = x [ i ] . B ; //回溯
//直接跳到下一种配料
dfs ( i + 1 ) ;
}
int main ( ) {
//读入输出优化的强迫症
ios : : sync_with_stdio ( false ) ;
//可支配的配料数
cin > > n ;
//输入配料数据
for ( int i = 1 ; i < = n ; i + + )
cin > > x [ i ] . S > > x [ i ] . B ; //先酸度,后甜度
//从第一个配料开始吧!
dfs ( 1 ) ;
//输出:酸度和甜度的最小的绝对差。
cout < < ans ;
return 0 ;
}