로곡 - P1036 선택수(귀속)

1616 단어 폭력.
제목 링크: 클릭하여 보기
제목 대의: n개의 수를 제시한다. 우리는 그 중에서 k개를 새로운 집합으로 선택하고 새로운 집합의 권한과 몇 개가 소수인지 물어야 한다.
제목 분석: 이 문제는 두 가지를 고찰했다.
  • 판단소수
  • 디자인 귀속
  • 왜 판단 소수를 단독으로 열거했습니까?처음에 나의 시제법이 틀렸기 때문이다.그리고 오랫동안 조정했기 때문에 귀속의 디자인은 그런대로 괜찮다. 어렵지도 않고 간단하지도 않다. (나에게 있어) 귀속으로 모든 자집을 한 번 뛰면 된다. 구체적으로 어떻게 모든 자집을 매거하고 누락되지 않도록 보증하는가. 우리는 강하 원칙의 귀속을 설계할 수 있다. 이렇게 매번 새로운 기점을 매거할 때마다 k개수를 선택한 상황에서 기점을 점차적으로 늘려 자집이 중복되지 않도록 하고 코드를 구체적으로 볼 수 있다.
    코드:
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;
      
    typedef long long LL;
      
    const int inf=0x3f3f3f3f;
      
    const int N=25;
    
    int n,k;
    
    int a[N];
    
    int is_pri(int x)// 
    {
    	if(x<2)
    		return 0;
    	for(int i=2;i*i<=x;i++)
    		if(x%i==0)
    			return 0;
    	return 1;
    }
    
    int dfs(int left,int sum,int start)//left:  sum:  start: 
    {
    	if(left==0)
    		return is_pri(sum);
    	int ans=0;
    	for(int i=start;i<=n;i++)// 
    		ans+=dfs(left-1,sum+a[i],i+1);// 
    	return ans;
    }
    
    int main()
    {
    //	freopen("input.txt","r",stdin);
    //	ios::sync_with_stdio(false);
    	scanf("%d%d",&n,&k);
    	for(int i=1;i<=n;i++)
    		scanf("%d",a+i);
    	printf("%d
    ",dfs(k,0,1)); return 0; }

    좋은 웹페이지 즐겨찾기