洛谷P1036 选数

题目

输入格式

输出格式

屏幕输出,格式为:1个整数(满足条件的种数)。

输入输出样例
输入 #1
4 3
3 7 12 19
输出 #1
1
原题–>link
分析

本题的本质是回溯算法
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。(百度百科解释)

Code
#include <iostream>
#include <cmath>
using namespace std;
int str[21]={
   0};
int count=0,sum=0,k=0,n=0;//count->记录符合题意得次数,sum->累计求和
bool JudgePrimeNumber(int a)//判断素数
{
   
    if(a<=1)    return false;
    for (int i = 2; i <= sqrt(a); ++i) {
   
        if(a%i==0)  return false;
    }
    return true;
}
void dfs(int time,int i)//递归回溯 time->记录次数,i->坐标
{
   
    if(time==k)
    {
   
        if (JudgePrimeNumber(sum)) {
   
            count++;
            return;
        }
    }
    for (i; i <=  n; ++i) {
   
        sum+=str[i]; //累加
        dfs(time+1,i+1);
        sum-=str[i]; //回退
    }
}
int main()
{
   
    cin >> n>>k;
    for (int i = 1; i <= n; ++i) {
   
        cin >> str[i];
    }
    dfs(0,1);
    cout << count;
    return 0;
}
全部评论

相关推荐

机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
Java大菜狗:纯纯招黑奴,一天还不到两百那么多要求,还不迟到早退,以为啥啊,给一点工资做一堆活,还以不拖欠员工工资为荣,这是什么值得骄傲的事情吗,纯纯***公司
点赞 评论 收藏
分享
07-18 18:45
已编辑
中山职业技术学院 Java
投递TP-LINK等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务