낙곡 과정 함수와 귀속 총결

2197 단어

P1028의 계산


1. 제목 상세 정보 낙곡 P1028


2. 실현 방법


   이 문제는 처음에 귀속적인 방법으로 해결하고자 했다. 즉, 하나의 전역 변수를 정의하여 계수한 다음에 이 자연수가 원수의 절반을 초과할 수 없는 조건을 통해 호출을 끝내는 것이다. 그러나 이 방법은 시간이 복잡하고 시간이 지나면 시간을 초과할 것이다. 코드는 다음과 같다.
#include
int s=1;
void sum(int n){
    int i;
    s+=n/2;
    for(i=2;i<=n/2;i++){
        sum(i);
    }
}
int main(){
    int n;
    scanf("%d",&n);
    sum(n);
    printf("%d
",s); return 0; }

   본제는 다른 각도에서 접근할 수 있다. 본제는 입력한 수를 같은 방법으로 처리하고 n이 비교적 작기 때문에 수학적인 방법으로 인접항의 추이 관계를 찾을 수 있는지를 고려한 다음에 순환으로 한 번 뛰면 해결할 수 있기 때문에 먼저 앞의 몇 가지를 하나하나 열거하여 규칙을 찾을 수 있다.
a[1]=1; a[2]=2;a[3]=2; a[4]=4;a[5]=4; a[6]=6;a[7]=6; a[8]=10;a[9]=10;
  는 a[2*n]=a[2*n+1]를 발견할 수 있고, 항목별로 보면 점차적인 규칙을 찾을 수 있다.
a[1]=1; a[2]=a[1]+1; a[3]=a[1]+1; a[4]=a[1]+a[2]+1; a[5]=a[1]+a[2]+1; a[i]=a[1]+a[2]+···+a[i/2]+1;(i는 정수)
이것은 이중 순환으로 시뮬레이션할 수 있다. 한 번은 반복하고, 한 번은 누적할 수 있다.마지막으로 아래 표만 통과하면 필요한 값을 찾을 수 있습니다.

3. 사고방식 총결


  는 일정한 규칙에 따라 수치를 처리하거나 귀속적으로 풀 수 있으나 비교적 복잡한 문제는 점차적으로 풀 수 있는지의 여부를 고려할 수 있다

P1036 선택


1. 제목 상세 정보 낙곡 P1036


2. 실현 방법


  가 이 문제를 실현할 때 난점은 주로 열거된 선택수에 대한 시뮬레이션을 어떻게 실현하는가에 있다고 생각한다. 왜냐하면 존재하는 수조 중의 수순은 고정된 것이기 때문에 그 중에서 일정한 수를 추출하여 누적하는 과정은 랜덤이기 때문에 시뮬레이션에 사고의 난이도를 증가시켰다.그러나 오른쪽에서 왼쪽으로 추출하면 과정이 상대적으로 고정될 수 있다는 것을 인식하면 (수조를 처리하지 않고 길이만 바꾸면 된다) 시뮬레이션의 난이도를 낮출 수 있다.  를 오른쪽에서 왼쪽으로 끊임없이 추출하는 과정은 유사하고 실현적으로도 한노타 문제와 비슷하다(함수를 호출하는 동시에 규모가 끊임없이 줄어든다). 그래서 귀속 방법을 고려해야 한다.코드는 다음과 같습니다.
#include
int a[5000001];
int s=0;
void ans(int sum){
    int i,j,k=1;
    for(i=2;i=k-1;i--){
            judge(i,k-1,sum+a[i]);
        }   
    }
}
int main(){
    int n,k,i;
    scanf("%d %d",&n,&k);
    for(i=0;i

3. 사고방식 총결


만약에 실현할 때 어떤 과정이 끊임없이 반복되지만 규모가 끊임없이 증가하거나 감소하는 것을 발견하면 귀속으로 실현하는 것을 고려할 수 있다.

좋은 웹페이지 즐겨찾기