选数

来源:互联网 发布:购物商城cms 编辑:程序博客网 时间:2024/05/22 07:06

http://codevs.cn/problem/1008/
一开始以为是DP,但是发现没法选,或者应该说自己不会。
也没有个状态方程。
然后看标签,是深度搜索。大体思路也就出来啦
此题主要问题出现在,边界的取值问题上。

#include<iostream>#include<stdio.h>#include<cmath>#include<algorithm>using namespace std;int daan = 0;int n, k;int a[25] = { 0 };bool paduan(int aa){    if (aa==0||aa==1)    {        return false;    }else{        for (int i = 2; i <=sqrt(aa); i++)        {            if (aa%i==0)            {                return false;            }        }        return true;    }}void dfs(int weizhi,int sum,int cishu){    if (cishu==k)    {        if (paduan(sum))        {//          cout << sum << endl;            daan++;        }    }    else    {        if (weizhi<n&&cishu<k)        {            for (int i = weizhi+1; i <= n; i++)            {                dfs(i,sum+a[i],cishu+1);            }        }    }}int main(){    cin >> n >> k;    for (int i = 1; i < n+1; i++)    {        cin >> a[i];    }    dfs(0,0,0);    cout << daan << endl;    system("pause");    return 0;}
0 0