HX_ztx @ 2024-11-28 11:53:48
题目,是的,只是一个橙的搜索。。。
哪错了啊啊啊啊
#include<bits/stdc++.h>
using namespace std;
const int N=100+10;
int n,k,a[N],ans=0;
bool ss(int x){
if(x<2)return 0;
for(int i=2;i*i<=x;i++){
if(!x%i)return 0;
}
return 1;
}
void dfs(int x,int y,int w){//现在位置,已选,和
if(x>n)return ;
if(y==k){
if(ss(w))ans++;
return ;
}
// if(n-x+1+y<k)return;
dfs(x+1,y+1,w+a[x]);
dfs(x+1,y,w);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dfs(0,0,0);
cout<<ans;
return 0;
}
by HX_ztx @ 2024-11-28 11:54:35
能做到全搜到啊
by csb0118 @ 2024-11-28 12:01:30
@HX_ztx 你样例都没过啊。
by HX_ztx @ 2024-11-28 12:02:04
@csb0118对啊,但是感觉写的没问题啊
by csb0118 @ 2024-11-28 12:03:40
注意到ss函数中“if(!x%i)”里,!的优先级是大于%的
by Tis员工 @ 2024-11-28 12:04:37
@HX_ztx
你的dfs(x,y,w)
是不是要表示到第
所以你不应该从dfs(0,0,0)
开始,而是要从dfs(1,0,0)
另外,把dfs
中 if(x>n)
和 if(y==k)
的这两个片段对调一下。x>n
表示搜索完毕,但是如果同时y=k
的话也是符合条件的。
改完就ac了
by Tis员工 @ 2024-11-28 12:07:00
@HX_ztx对哦另外优先级要改一下。其实每个算式都加一个括号也不会死还不会错(
by csb0118 @ 2024-11-28 12:07:39
“x%i”要加个括号,否则只要 !x成立就会返回。
by HX_ztx @ 2024-11-28 12:14:34
@csb0118@Tis员工谢谢谢谢,已经关了,谢谢了