C++洛谷P1036 選數DFS
點這裡---->>>>題目來源
已知 nn 個整數 x_1,x_2,…,x_nx
1
,x
2
,…,x
n
,以及11個整數kk(k<nk<n)。從nn個整數中任選kk個整數相加,可分別得到一系列的和。例如當n=4,k=3n=4,k=3,44個整數分別為3,7,12,193,7,12,19時,可得全部的組合與它們的和為:
3+7+12=223+7+12=22
3+7+19=293+7+19=29
7+12+19=387+12+19=38
3+12+19=343+12+19=34。
現在,要求你計算出和為素數共有多少種。
例如上例,只有一種的和為素數:3+7+19=293+7+19=29。
輸入格式
鍵盤輸入,格式為:
n,kn,k(1 \le n \le 20,k<n1≤n≤20,k<n)
x_1,x_2,…,x_n (1 \le x_i \le 5000000)x
1
,x
2
,…,x
n
(1≤x
i
≤5000000)
輸出格式
螢幕輸出,格式為: 11個整數(滿足條件的種數)。
輸入輸出樣例
輸入 #1複製
4 3
3 7 12 19
輸出 #1複製
1
#include<bits/stdc++.h>
using namespace std;
bool prime(int n){
for(int i=2;i<=sqrt(double(n));i++)
if(n%i==0)return false;
return true;
}
int a[21];
int sum,ct,n;
void dfs(int step,int k,int sti){//組合第step個數,需要組合k個數,選數開始的i
if(step==k+1){
if(prime(sum)){
ct++;
}
return ;
}
for(int i=sti;i<n;i++){//核心程式碼 組合
sum+=a[i];
dfs(step+1,k,i+1);
sum-=a[i];//有dfs不上回溯???
}
return;
}
int main(){
int k;scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
dfs(1,k,0);
printf("%d\n",ct);
return 0;
}
相關文章
- 【洛谷OJ】【JAVA】P1036 選數Java
- 洛谷 P1313 計算係數
- [題解] [洛谷P1404] 平均數
- 洛谷 1068——分數線劃定(排序)排序
- 洛谷傻逼之處
- 洛谷八皇后問題
- 洛谷P1102 A-B數對
- 洛谷P1090合併果子AC程式碼(C++)C程式C++
- 洛谷 1279 字串距離字串
- 洛谷 1057 傳球遊戲遊戲
- 洛谷 1781——宇宙總統(排序)排序
- 洛谷【入門3】P1035 級數求和
- Mzc和男家丁的遊戲(洛谷)遊戲
- 1280 洛谷 尼克的任務
- 洛谷 P10254 口吃
- 洛谷P3600 隨機數生成器(期望dp 組合數)隨機
- 洛谷T90444 密碼 題解密碼
- 洛谷P1852 奇怪的字串字串
- 「雜題亂刷」洛谷 P2572
- 洛谷-P2178 學習筆記筆記
- 洛谷 P1656 炸鐵路
- 洛谷題單指南-集合-P1102 A-B 數對
- 洛谷 P3711 倉鼠的數學題 [伯努利數 fft]FFT
- 洛谷題單指南-數學基礎問題-P1835 素數密度
- 棧的應用 -洛谷P1449
- 洛谷P1957 做題筆記筆記
- 洛谷P2197 nim遊戲(Nim遊戲)遊戲
- 洛谷P3809 【模板】字尾排序排序
- 洛谷P2251 質量檢測
- 「雜題亂刷」洛谷 P4801
- 卡特蘭數 洛谷P1641 [SCOI2010]生成字串字串
- 洛谷 P1004 [NOIP2000 提高組] 方格取數
- 快速排序--洛谷卡TLE後最終我還是選擇了三向切割排序
- 洛谷P1481 魔族密碼(LIS)密碼
- 洛谷:P2814 家譜(並查集)並查集
- 洛谷P1972(莫隊演算法)演算法
- 洛谷P3954 成績【民間資料】
- [題解] [洛谷 P1174] 打磚塊