zoukankan      html  css  js  c++  java
  • codeup 算法笔记【递归入门】组合+判断素数

    问题 C: 【递归入门】组合+判断素数

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 205  解决: 77
    [提交][状态][讨论版][命题人:外部导入]

    题目描述

    已知 n 个整数b1,b2,…,bn

    以及一个整数 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<=5000000) 

    输出

    一个整数(满足条件的方案数)。 

    样例输入

    4 3
    3 7 12 19
    

    样例输出

    1
    #include<iostream>
    #include<cstring>
    using namespace std;
    
    bool isprime(int n)
    {
    	if (n<=1)
    	return false;
    	for (int i=2;i*i<=n;i++)
    	if (n%i==0)
    	return false;
    	
    	return true;
    }//判断素数 
    
    int a[22];
    int b[22];
    int p[22]; 
    bool vis[22];
    int n,k,sum,ans;
    
    void dfs(int index)
    {
    	if (index==k+1)
    	{
    		if (isprime(sum))
    		ans++;//看是否加起来是素数 
    		for (int i=1;i<=index-1;i++)
    		cout<<p[i]<<" ";
    		cout<<endl;
    		return ;
    	}
    	
    	
    	for (int i=1;i<=n;i++)
    	{
    		if (vis[i]==false  &&  i>p[index-1])//保证这个排列是按顺序来的,避免重复计算导致答案错误 
    		{
    			p[index] = i;
    			vis[i] = true;
    			sum+=a[i];//最巧妙的地方,,利用全排列的排列过程中,来加上我输入的数字 
    			
    			dfs(index+1);
    			
    			vis[i] = false;
    			sum-=a[i];//有加就有减 
    		}
    	}
    }
    
    
    int main()
    {
    	memset(b,0,sizeof(b));
    	memset(vis,0,sizeof(vis));
    	cin>>n>>k;
    	for (int i=1;i<=n;i++)
    	cin>>a[i],p[i]=i;//一开始要从第一个排列填好  才开始遍历 ,这与传统的dfs全排列做了点变化 
    	
    	ans=0;
    	
    	dfs(1);
    	cout<<ans<<endl;
    	
    	return 0;
    } 
    //妈的,这个答案真巧妙 
    
  • 相关阅读:
    HDU1294 Rooted Trees Problem(整数划分 组合数学 DP)
    HDU2546 饭卡(背包)
    经典动态规划总结
    POJ1285 Combinations, Once Again(背包 排列组合)
    计数 组合数学总结
    莫队算法 2038: [2009国家集训队]小Z的袜子(hose)
    循环-24. 求给定序列前N项和之二
    循环-23. 找完数
    循环-22. 输出闰年
    循环-21. 求交错序列前N项和
  • 原文地址:https://www.cnblogs.com/Romantic-Chopin/p/12451476.html
Copyright © 2011-2022 走看看