做之前我是看了下标签,看上面写着两个大字——“搜索”,于是,我就用了深搜做。什么,你问“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;
}
谢各位大佬。