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
- dfs與貪心演算法——洛谷5194演算法
- 洛谷
- 洛谷P1784.數獨
- 洛谷-P1036-選數(順便講講深搜)
- 洛谷-P2804-神秘數字
- 洛谷團隊
- 洛谷 P1313 計算係數
- [題解] [洛谷P1404] 平均數
- 洛谷死亡時間
- 洛谷 - P5369
- 洛谷P6786
- 洛谷P1786
- 洛谷 1068——分數線劃定(排序)排序
- 昨天放洛谷的圖
- 洛谷網校學習
- 洛谷傻逼之處
- 洛谷八皇后問題
- 洛谷 - P6190
- 將洛谷私信接入WindowsWindows
- 洛谷P1102 A-B數對
- 洛谷P3383 【模板】線性篩素數
- 洛谷P1090合併果子AC程式碼(C++)C程式C++
- 洛谷【入門3】P1035 級數求和
- 洛谷P2404 自然數的拆分問題——題解
- 洛谷 1279 字串距離字串
- 洛谷 1057 傳球遊戲遊戲
- 洛谷 1781——宇宙總統(排序)排序
- 洛谷題單指南-字串-Test字串
- 洛谷P10693
- 洛谷P10725
- 洛谷-P9574 題解
- 洛谷P3853總結
- Mzc和男家丁的遊戲(洛谷)遊戲
- 1280 洛谷 尼克的任務
- 洛谷 P5595 歌唱比賽
- 洛谷 P10254 口吃
- 洛谷-P9830 題解