2514: 【普及-】【P2036】PERKET
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:14
解决:7
题目描述
Perket 是一种流行的美食。为了做好 Perket,厨师必须谨慎选择食材,以在保持传统风味的同时尽可能获得最全面的味道。你有 种可支配的配料。对于每一种配料,我们知道它们各自的酸度 和苦度 。当我们添加配料时,总的酸度为每一种配料的酸度总乘积;总的苦度为每一种配料的苦度的总和。
众所周知,美食应该做到口感适中,所以我们希望选取配料,以使得酸度和苦度的绝对差最小。
另外,我们必须添加至少一种配料,因为没有任何食物以水为配料的。
输入
第一行一个整数 ,表示可供选用的食材种类数。
接下来 行,每行 个整数 和 ,表示第 种食材的酸度和苦度。
输出
一行一个整数,表示可能的总酸度和总苦度的最小绝对差。
样例输入 复制
1
3 10
样例输出 复制
7
提示
输入 #2
2
3 8
5 8
输出 #2
1
输入 #3
4
1 7
2 6
3 8
4 9
输出 #3
1
数据规模与约定
对于 的数据,有 ,且将所有可用食材全部使用产生的总酸度和总苦度小于 ,酸度和苦度不同时为 和 。
#include<bits/stdc++.h> using namespace std; int n,s[15],b[15],v[15]; int sums=1,sumb=0,ans=99999999; void dfs(int start){ if (start>=n) return; for(int i = start; i < n; i++) { if (v[i]==0) { v[i]=1; sums*=s[i]; sumb+=b[i]; ans=min(ans,abs(sums-sumb)); dfs(start+1); sums/=s[i]; sumb-=b[i]; v[i]=0; } } return ; } int main(){ scanf("%d",&n);//输入 for(int i = 0; i < n; i++) scanf("%d%d",&s[i],&b[i]);//循环读入 dfs(0);//调用函数 printf("%d\n",ans);//输出答案 return 0;//结束程序 }
#include<bits/stdc++.h> using namespace std; int n,s[15],b[15]; int sums=1,sumb=0,ans=99999999; void search(){ int U=1<<n; for(int S=1;S<U;S++) { sums=1,sumb=0; for(int i=0;i<n;i++) { if(S&(1<<i)) { sums*=s[i]; sumb+=b[i]; } } ans=min(ans,abs(sums-sumb)); } } int main(){ scanf("%d",&n);//输入 for(int i = 0; i < n; i++) scanf("%d%d",&s[i],&b[i]);//循环读入 search();//调用函数 printf("%d\n",ans);//输出答案 return 0;//结束程序 }