[COCI 2008/2009 #2] PERKET - 洛谷
这又又又是一道搜索题,相信有了前面的题做铺垫做这道题会非常快,这里我选择了深搜,因为要巩固一下。
代码如下:
#include<stdio.h>
#include <stdlib.h>
int min;
int a[10000],b[10000];
int n;
int t=1000000000;
void dfs(int w,int z,int x)
{
if(w>n)
return ;
z*=a[w];
x+=b[w];
int l;
l=abs(z-x);
if(t>l)
t=l;
for(int k=w+1;k<=n;k++)
dfs(k,z,x);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d %d",&a[i],&b[i]);
for(int j=1;j<=n;j++){
int z=1,x=0;
dfs(j,z,x);
}
printf("%d",t);
return 0;
}
思路:因为酸度是相乘,苦度是相加,这里我们可以定义z=1乘接下来的数表示酸度,x=0加上接下来的数表示苦度;用酸度减苦度的绝对值记录下来,和下一组搜出来的结果作对比,输出最小的即可;
注意:1.这里使用了头文件#include<stdlib.h>中的abs函数求绝对值;
2.搜索时不仅仅要从第一个数搜起,还要选择从第二或第三个等等数开始搜。
测后感即测试后的感受:1.一定要注意细节,有时候细节地方错了找都找不到(不要求快,求稳)。
2.遇到不会的可以选择跳过;
3.一定要先分析再上手敲。