P1036 [NOIP 2002 普及組] 選數(DFS)

題目描述

已知?n?個整數?x1?,x2?,?,xn?,以及?1?個整數?k(k<n)。從?n?個整數中任選?k?個整數相加,可分別得到一系列的和。例如當?n=4,k=3,4?個整數分別為?3,7,12,19?時,可得全部的組合與它們的和為:

3+7+12=22

3+7+19=29

7+12+19=38

3+12+19=34

現在,要求你計算出和為素數共有多少種。

例如上例,只有一種的和為素數:3+7+19=29。

輸入格式

第一行兩個空格隔開的整數?n,k(1≤n≤20,k<n)。

第二行?n?個整數,分別為?x1?,x2?,?,xn?(1≤xi?≤5×106)。

輸出格式

輸出一個整數,表示種類數。

輸入輸出樣例

輸入 #1復制

4 3
3 7 12 19

輸出 #1復制

1

題目鏈接:P1036 [NOIP 2002 普及組] 選數 - 洛谷

學習鏈接:遞推與遞歸 + DFS | 手把手帶你畫出遞歸搜索樹_嗶哩嗶哩_bilibili

解題思路:?

  1. ?給出n個數,選k個數作為一個組合,對組合中元素求和,和為素數就累計cnt++
  2. 設置一個桶t[],將未選過的數裝進去,容量為k?
  3. 若桶t[]裝夠了k個數,對其中元素求和,并進行判斷是否為素數,若為素數就累計
  4. 剪枝:可選元素個數(n-start+1)<空位置個數(k-x+1)

?代碼如下:

#include<bits/stdc++.h>
using namespace std;
int n,k;
int a[25];//可選元素數組
int t[25];//記錄組合結果
int visited[25];//標記元素是否已訪問
int cnt=0;//累計方案數//判斷是否是素數
bool isprime(int sum)
{if(sum<2)	return true;for(int i=2;i<=sum/i;i++)if(sum%i==0)return false;return true;
} void dfs(int x,int start)
{//剪枝:可選元素個數(n-start+1)<空位置個數(k-x+1)if(n-start+1<k-x+1)	return ;//若枚舉的個數已經足夠,得到一個組合if(x>k){//對組合元素求和int sum=0; for(int i=1;i<=k;i++)sum=sum+t[i];//判斷sum是否是素數if(isprime(sum))cnt++;return ;//不管sum是不是素數,都要結束搜素 } for(int i=start;i<=n;i++){//將i位置的元素裝入t[] t[x]=a[i];//保證枚舉t[]的下一個位置的元素是從a[]的下一個位置開始dfs(x+1,i+1);//騰出位置,搜素下一個組合 t[x]=0;}
} 
int main()
{cin>>n>>k;for(int i=1;i<=n;i++)cin>>a[i];dfs(1,1);//第一個位置從第一個元素開始枚舉cout<<cnt<<endl; return 0;
}

希望能幫助到各位同志,祝天天開心,學業進步!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74648.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74648.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74648.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在響應式網頁的開發中使用固定布局、流式布局、彈性布局哪種更好

一、首先看下固定布局與流體布局的區別 &#xff08;一&#xff09;固定布局 固定布局的網頁有一個固定寬度的容器&#xff0c;內部組件寬度可以是固定像素值或百分比。其容器元素不會移動&#xff0c;無論訪客屏幕分辨率如何&#xff0c;看到的網頁寬度都相同。現代網頁設計…

二分查找與二叉樹中序遍歷——面試算法

目錄 二分查找與分治 循環方式 遞歸方式 元素中有重復的二分查找 基于二分查找的拓展問題 山脈數組的頂峰索引——局部有序 旋轉數字中的最小數字 找缺失數字 優化平方根 中序與搜索樹 二叉搜索樹中搜索特定值 驗證二叉搜索樹 有序數組轉化為二叉搜索樹 尋找兩個…

字符串——面試考察高頻算法題

目錄 轉換成小寫字母 字符串轉化為整數 反轉相關的問題 反轉字符串 k個一組反轉 僅僅反轉字母 反轉字符串里的單詞 驗證回文串 判斷是否互為字符重排 最長公共前綴 字符串壓縮問題 轉換成小寫字母 給你一個字符串 s &#xff0c;將該字符串中的大寫字母轉換成相同的…

現代復古電影海報品牌徽標設計襯線英文字體安裝包 Thick – Retro Vintage Cinematic Font

Thick 是一種大膽的復古字體&#xff0c;專為有影響力的標題和懷舊的視覺效果而設計。其厚實的字體、復古魅力和電影風格使其成為電影海報、產品標簽、活動品牌和編輯設計的理想選擇。無論您是在引導電影的黃金時代&#xff0c;還是在現代布局中注入復古活力&#xff0c;Thick …

[C++面試] new、delete相關面試點

一、入門 1、說說new與malloc的基本用途 int* p1 (int*)malloc(sizeof(int)); // C風格 int* p2 new int(10); // C風格&#xff0c;初始化為10 new 是 C 中的運算符&#xff0c;用于在堆上動態分配內存并調用對象的構造函數&#xff0c;會自動計算所需內存…

Unity URP管線與HDRP管線對比

1. 渲染架構與底層技術 URP 渲染路徑&#xff1a; 前向渲染&#xff08;Forward&#xff09;&#xff1a;默認單Pass前向&#xff0c;支持少量實時光源&#xff08;通常4-8個逐物體&#xff09;。 延遲渲染&#xff08;Deferred&#xff09;&#xff1a;可選但功能簡化&#…

JDK8卸載與安裝教程(超詳細)

JDK8卸載與安裝教程&#xff08;超詳細&#xff09; 最近學習一個項目&#xff0c;需要使用更高級的JDK&#xff0c;這里記錄一下卸載舊版本與安裝新版本JDK的過程。 JDK8卸載 以windows10操作系統為例&#xff0c;使用快捷鍵winR輸入cmd&#xff0c;打開控制臺窗口&#xf…

python爬蟲:DrissionPage實戰教程

如果本文章看不懂可以看看上一篇文章&#xff0c;加強自己的基礎&#xff1a;爬蟲自動化工具&#xff1a;DrissionPage-CSDN博客 案例解析&#xff1a; 前提&#xff1a;我們以ChromiumPage為主&#xff0c;寫代碼工具使用Pycharm&#xff08;python環境3.9-3.10&#xff09; …

07-01-自考數據結構(20331)- 排序-內部排序知識點

內部排序算法是數據結構核心內容,主要包括插入類(直接插入、希爾)、交換類(冒泡、快速)、選擇類(簡單選擇、堆)、歸并和基數五大類排序方法。 知識拓撲 知識點介紹 直接插入排序 定義:將每個待排序元素插入到已排序序列的適當位置 算法步驟: 從第二個元素開始遍歷…

Go語言-初學者日記(八):構建、部署與 Docker 化

&#x1f9f1; 一、go build&#xff1a;最基礎的構建方式 Go 的構建工具鏈是出了名的輕量、簡潔&#xff0c;直接用 go build 就能把項目編譯成二進制文件。 ? 構建當前項目 go build -o myapp-o myapp 指定輸出文件名默認會構建當前目錄下的 main.go 或 package main &a…

教程:如何使用 JSON 合并腳本

目錄 1. 介紹 2. 使用方法 3. 注意事項 4. 示例 5.完整代碼 1. 介紹 該腳本用于將多個 COCO 格式的 JSON 標注文件合并為一個 JSON 文件。COCO 格式常用于目標檢測和圖像分割任務&#xff0c;包含以下三個主要部分&#xff1a; "images"&#xff1a;圖像信息&a…

Java學習總結-緩沖流性能分析

測試用例&#xff1a; 分別使用原始的字節流&#xff0c;以及字節緩沖流復制一個很大的視頻。 測試步驟&#xff1a; 在這個分析性能需要一個記錄時間的工具&#xff1a;這個是記錄1970-1-1 00&#xff1a;00&#xff1a;00到現在的總毫秒值。 long start System.currentT…

流影---開源網絡流量分析平臺(五)(成果展示)

目錄 前沿 攻擊過程 前沿 前四章我們已經成功安裝了流影的各個功能&#xff0c;那么接下來我們就看看這個開源工具的實力&#xff0c;本實驗將進行多個攻擊手段&#xff08;ip掃描&#xff0c;端口掃描&#xff0c;sql注入&#xff09;攻擊靶機&#xff0c;來看看流影的態感效…

vs環境中編譯osg以及osgQt

1、下載 OpenSceneGraph 獲取源代碼 您可以通過以下方式獲取 OSG 源代碼: 官網下載:https://github.com/openscenegraph/OpenSceneGraph/releases 使用 git 克隆: git clone https://github.com/openscenegraph/OpenSceneGraph.git 2、下載必要的第三方依賴庫 依賴庫 ht…

Unity:標簽(tags)

為什么需要Tags&#xff1f; 在游戲開發中&#xff0c;游戲對象&#xff08;GameObject&#xff09;數量可能非常多&#xff0c;比如玩家、敵人、子彈等。開發者需要一種簡單的方法來區分這些對象&#xff0c;并根據它們的類型執行不同的邏輯。 核心需求&#xff1a; 分類和管…

【C++11】lambda

lambda lambda表達式語法 lambda表達式本質是一個匿名函數對象&#xff0c;跟普通函數不同的是它可以定義在函數內部。lambda表達式語法使用層而言沒有類型&#xff0c;所以一般是用auto或者模板參數定義的對象去接收lambda對象。 lambda表達式的格式&#xff1a;[capture-l…

fpga:分秒計時器

任務目標 分秒計數器核心功能&#xff1a;實現從00:00到59:59的循環計數&#xff0c;通過四個七段數碼管顯示分鐘和秒。 復位功能&#xff1a;支持硬件復位&#xff0c;將計數器歸零并顯示00:00。 啟動/暫停控制&#xff1a;通過按鍵控制計時的啟動和暫停。 消抖處理&#…

《UNIX網絡編程卷1:套接字聯網API》第6章 IO復用:select和poll函數

《UNIX網絡編程卷1&#xff1a;套接字聯網API》第6章 I/O復用&#xff1a;select和poll函數 6.1 I/O復用的核心價值與適用場景 I/O復用是高并發網絡編程的基石&#xff0c;允許單個進程/線程同時監控多個文件描述符&#xff08;套接字&#xff09;的狀態變化&#xff0c;從而高…

SpringBoot+vue前后端分離整合sa-token(無cookie登錄態 詳細的登錄流程)

SpringBootvue前后端分離整合sa-token&#xff08;無cookie登錄態 & 詳細的登錄流程&#xff09; 1.介紹sa-token1.1 框架定位1.2 核心優勢 2.如何整合sa-token3.如何進行無cookie模式登錄3.1后端3.1.1 VO層3.1.2 Controller層3.1.3 Service層 3.2前端3.2.1 登錄按鈕自定義…

MYOJ_1171:(洛谷P1075)[NOIP 2012 普及組] 質因數分解(數學相關,質數與約數基礎)

題目描述 已知正整數 n 是兩個不同的質數的乘積&#xff0c;試求出兩者中較大的那個質數。 1≤n≤210^9 輸入 輸入一個正整數 n。 輸出 輸出一個正整數 p&#xff0c;即較大的那個質數。 樣例輸入輸出 輸入&#xff1a;21 輸出&#xff1a;7 思路: 為了節約時間與…