67pts后的乱搞?
查看原帖
67pts后的乱搞?
1374349
wangkaiwei楼主2024/12/14 10:52

乱求排列数上去结果就A了

#include<bits/stdc++.h>
using namespace std;
int n,m,a[25],v[25],ans=0,t[25];
bool is_prime(int k){
	for(int i=2;i*i<=k;i++){
		if(k%i==0) return 0;
	}
	return 1;
}
void dfs(int step,int sum){
	if(step>m){
		if(is_prime(sum)){
			ans++;
		}
		return;
	}
	for(int i=1;i<=n;i++){
		if(v[i]==0&&a[i]>=t[step-1]){
			v[i]=1;
			t[step]=a[i];
			dfs(step+1,sum+a[i]);
			v[i]=0;
		}
	}
}
int pl(int nn,int mm){
	int cnt1=1,cnt2=1;
	for(int i=mm;i>=1;i--){
		cnt2*=i;
	}
	for(int i=nn;i>=nn-mm+1;i--){
		cnt1*=i;
	}
	return cnt1/cnt2;
}
int main(){
	bool flag=1;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(a[i]!=1) flag=0;
	}
	if(flag){
		cout<<pl(n,m);
		return 0;
	}
	dfs(1,0); 
	cout<<ans;
	return 0;
}
2024/12/14 10:52
加载中...