DFS
本题还没有用到剪纸,但是我觉得在枚举DFS的深度上有了想法
//https://www.luogu.com.cn/problem/P2036?contestId=96626
//DFS
#include<cstdio>
#include<math.h>
using namespace std;
#define MAXINT 999999
int n;//有几种调料
//int tiao[11][3];//调料数组
bool visited[11];
int s[11];
int k[11];
int flavor=MAXINT;
void DFS(int put,int i)//i代表可以枚举的调料的个数,put代表放了几个调料了
{
if(put>=i)//放的调料数量大于可以放的调料数目
{
//遍历所有已经放过的调料去统计此时的口味
int suan=1;
int ku=0;
for(int m=1;m<=n;m++)
{
if(visited[m]==true)
{
//计算所有的酸度
suan=suan*s[m];
ku =ku +k[m];
}
}
int ciflavor=abs(suan-ku);
if(ciflavor<flavor)
{
flavor=ciflavor;//更新更小值
}
return;
}
for(int k=1;k<=n;k++)
{
if(visited[k]==false)
{
visited[k]=true;
DFS(put+1,i);
visited[k]=false;
}
}
}
int main()
{
scanf("%d",&n);
for(int i =1;i<=n;i++)
{
visited[i]=false;
}
for(int i=1 ; i<=n;i++)
{
scanf("%d%d",&s[i],&k[i]);//输入酸度
}
//从一种调料开始枚举枚举到n种调料,类比于一个滑动窗口
for(int i=1;i<=n;i++)
{
int put=0;//已经放了几个调料了
DFS(put,i);
}
printf("%d",flavor);
}