zoukankan      html  css  js  c++  java
  • CODE[VS] 1008 选数

    题目描述 Description

    已知 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)。

    输入描述 Input Description

     键盘输入,格式为:
      n , k (1<=n<=20,k<n)
      x1,x2,…,xn (1<=xi<=5000000)

    输出描述 Output Description

    屏幕输出,格式为:
      一个整数(满足条件的种数)。

    样例输入 Sample Input

    4 3
    3 7 12 19

    样例输出 Sample Output

    1

    数据范围及提示 Data Size & Hint

    (1<=n<=20,k<n)
    (1<=xi<=5000000)


    这个题感觉一看时间限制只有1s钟,立刻考虑是不是用打表然后查表的方式来解决,但是看了看数据大小还是放弃了,空间是不够用的,所以我初步想到的利用欧拉筛法求素数打表然后用dfs判断查表的方法叫我抛弃了,之后就尝试了一下普通的DFS和求素数,结果就过了,以后对时间和空间的把握要更强一些.
    /*************************************************************************
        > File Name: 选数.c
        > Author: zhanghaoran
        > Mail: chilumanxi@gmail.com
        > Created Time: 2015年06月09日 星期二 10时09分32秒
     ************************************************************************/
    
    #include <stdio.h>
    #include <string.h>
    
    int n, k; //n为整数个数,k为任选几个数
    int a[21];
    int flag[21];
    int res = 0;
    
    
    int check_prim(int n){
    	int i;
    	if(n == 1 || n == 0)
    		return 0;
    	for(i = 2; i *i <= n; i ++ ){
    		if(n % i == 0)
    			return 0;
    	}
    	return 1;
    }
    
    void dfs(int step, int pos, int sum){
    	int i;
    	memset(flag, 0, sizeof(flag));
    	if(step == k && check_prim(sum)){
    		res ++;
    		return ;
    	}
    	else if(step == k)
    		return ;
    	int vv[21];
    	for(i = 0; i < n; i ++){
    		vv[i] = flag[i];
    	}
    	for(i = pos + 1; i < n; i ++){
    		if(!vv[i])
    			dfs(step + 1, i, sum + a[i]);
    	}
    	for(i = 0; i < n; i ++)
    		flag[i] = vv[i];
    }
    
    
    
    int main(void){
    	int i;
    	scanf("%d%d", &n, &k);
    	for(i = 0; i  < n; i ++){
    		scanf("%d", &a[i]);
    	}
    	dfs(0, -1, 0);
    	printf("%d",res);
    
    }
    


  • 相关阅读:
    usage of tmux docker
    mac. mysql
    使用ssh远程编辑
    systemd-udevadm
    iperf
    brctl
    NAT
    Linux 网络配置
    Linux 命令行快捷键
    sed 参数分析
  • 原文地址:https://www.cnblogs.com/chilumanxi/p/5136133.html
Copyright © 2011-2022 走看看