洛谷 P1036 选数
生活随笔
收集整理的這篇文章主要介紹了
洛谷 P1036 选数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
P1036 選數
題目描述
已知 n 個整數 x1,x2,…,xn,以及一個整數 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)
x1,x2,…,xn (1<=xi<=5000000)
?
輸出格式:?
屏幕輸出,格式為:
一個整數(滿足條件的種數)。
?
輸入輸出樣例
輸入樣例#1:?復制 4 3 3 7 12 19 輸出樣例#1:?復制 1思路:搜索。 #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,k,ans; int num[22],vis[22]; int judge(int now){for(int i=2;i<=sqrt(now);i++)if(now%i==0) return false;return true; } void dfs(int tot,int sum,int pre){if(tot==k){if(judge(sum)) ans++;return ;}for(int i=pre+1;i<=n;i++)if(!vis[i]){vis[i]=1;dfs(tot+1,sum+num[i],i);vis[i]=0;} } int main(){scanf("%d%d",&n,&k);for(int i=1;i<=n;i++)scanf("%d",&num[i]);dfs(0,0,0);cout<<ans; }
?
?轉載于:https://www.cnblogs.com/cangT-Tlan/p/7894369.html
總結
以上是生活随笔為你收集整理的洛谷 P1036 选数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python学习之路1 - 基础入门
- 下一篇: 填权除权什么意思 反映在股票涨跌上