깊이 우선 검색과 문제 단순 함수 귀속 "더하기, 더하기, 더하기"

4509 단어
제목: Sum of Factorials
코드:
#include<cstdio>
#include<iostream>
#include<stdlib.h>
#include<string.h>
int n;
int store[11]={1,1,2,6,24,120,720,5040,40320,362880};
bool dfs(int i,int sum)//9             
{
    if(i==10)return sum==n;//   
    
    if(dfs(i+1,sum))return true;//          
    
    if(dfs(i+1,sum+store[i]))return true;//         
    
    return false;//     
}
int main()
{

    while(scanf("%d",&n)!=EOF)
    {
        if(n<0)break;
        if(n==0)
        {
            printf("NO
"); continue; } bool t; t=dfs(0,0); if(t)printf("YES
"); else printf("NO
"); } return 0; }

핵심 부분 추가 또는 추가 안 함

int store[11]={1,1,2,6,24,120,720,5040,40320,362880};
bool dfs(int i,int sum)//9             
{
    if(i==10)return sum==n;//   
    
    if(dfs(i+1,sum))return true;//          
    
    if(dfs(i+1,sum+store[i]))return true;//         
    
    return false;//     
}

ffs는 비교적 편리한 용도로 이런 유형의 제목인 부분과 문제를 판단할 수 있다.우선 첫 번째 부분에서 모든 노드를 판단했는지 여부를 판단하고sum==n으로 되돌려줍니다. 찾으면 True로 돌아가고 찾지 못하면 False로 돌아갑니다.
두 번째 부분은 현재 이 노드에서 이 노드가 대표하는 수를 더하지 않는 값을 선택하여 원하는 결과를 얻고 True로 돌아간다는 것을 나타낸다.
세 번째 부분은 현재 이 노드에서 이 노드가 대표하는 수를 더한 값을 선택하여 원하는 결과를 얻고 True로 돌아간다는 것을 나타낸다.
마지막으로 만약에 이 노드에 있다면 이 노드의 상태가 어떻든지 간에 원하는 값을 찾지 못하고false로 되돌아갈 것이다.

좋은 웹페이지 즐겨찾기