欢迎光临散文网 会员登陆 & 注册

DFS

2023-03-01 22:20 作者:仓鼠翞  | 我要投稿

本题还没有用到剪纸,但是我觉得在枚举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);
}

DFS的评论 (共 条)

分享到微博请遵守国家法律