P1164小A点菜,能用DFS实现吗?
  • 板块学术版
  • 楼主dake2010
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/7/14 15:14
  • 上次更新2023/10/27 20:23:46
查看原帖
P1164小A点菜,能用DFS实现吗?
655471
dake2010楼主2022/7/14 15:14

做之前我是看了下标签,看上面写着两个大字——“搜索”,于是,我就用了深搜做。什么,你问“dp”在哪,那当然是被我选择性忽略了啊。但是,我用深搜做后只得了90分,最后一个点TLE了。对此我只想手撕亲切的问候亿下 某个促使洛谷加第11样例的人。总之,小的在这跪求各位大佬,给我一个解答,这题能否用DFS做?如果能,能否帮我改一下代码。 这是我的代码,请各位大佬审阅:

#include<bits/stdc++.h>
using namespace std;
int n,m;
long long ans;
int a[1000];
int b[1000];
void dfs(int s,int cur)
{
   if(s==m)
   {
   	ans++;
   	return;
   }
   if(s>m)
   {
   	return;
   }
   for(int i=cur;i<=n;i++)
   {
   	if(b[i]==0&&s+a[i]<=m)
   	{
   		b[i]=1;
   		dfs(s+a[i],i+1);
   		b[i]=0;
   	}
   }
   return;
}
int main()
{
   int s=0;
   scanf("%d%d",&n,&m);
   for(int i=1;i<=n;i++)
   {
   	scanf("%d",&a[i]);
   	s+=a[i];
   }
   sort(a+1,a+n+1);
   while(a[n]>m)
   {
   	n--;
   }
   if(s<m)
   {
   	printf("0");
   	return 0;
   }
   dfs(0,1);
   printf("%lld",ans);
   return 0;
}

谢各位大佬。

2022/7/14 15:14
加载中...