洛谷 P1036 选数

原题链接

image

题解:

#include "iostream"
#include "algorithm"
#define ll long long
using namespace std;
ll sum=0;
bool prime(ll x){
    int n=2;
    for(;x%n!=0;n++);
    sum=0;
    return n==x;
}
int main(){
    int n,k,num[25]={0},flag[25]={0},count=0;
    cin>>n>>k;
    for(int i=k;i<n;i++)flag[i]=true;
    for(int i=0;i<n;i++)cin>>num[i];
    do{
        for(int i=0;i<n;i++)if(flag[i]==false)sum+=num[i];
        if(prime(sum))count++;
    }while (next_permutation(flag,flag+n));
    cout<<count;
}

本题依然可以使用 next_permutation 函数

P1157 相似做法 使用一个状态数组搭配该函数来进行求组合 具体流程请到p1157题解查看
所以在这里基本可以说 求基本的组合 使用该函数相比dfs更加方便快捷

DFS做法 待后续补充

posted @ 2023-01-15 20:03  Cheng_Mao  阅读(27)  评论(0)    收藏  举报