zcmu1374 : 최고의 나루토 군대 (재귀 적)

제목 링크 : https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1374

이야기

닌자 섀도우 클론. 닌자는 n 점 차크라를 가지고 있습니다. 차크라의 수가 1 개를 초과하면 그림자 복제를 만들고, 팬텀을 만들고, ai 점 차크라를 분할하여 2 점 차크라를 남기고, 동시에 신체 피로 값을 증가시킬 수 있습니다. -bi |, phantom 그리고 대상은 차크라의 수가 1이 될 때까지 클론을 계속해서 숨길 수 있습니다. 팬텀이 가장 많은 경우 가장 작은 피로 값을 요청하고 최소 피로 값을 찾으십시오.

범위 : (0 <N <1e7)

아이디어

dfs는 재귀 적으로 해결됩니다. 우선, 그는 n-1 개의 팬텀을 가지고 있습니다. 이것은 의심 할 여지없이 피로 값을 줄인 다음 | ai-bi |를 줄여야합니다. n이 짝수 일 때 ai를 n / 2와 같게하면 피로 값 0, n이 홀수 인 경우 ai를 n / 2로 설정하지만 피로 값은 1 씩 증가합니다. 팬텀도 계속 복제 될 수 있으므로 재귀 적으로 해결할 수 있습니다.

ac 코드

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int dfs(int n){
    if(n <= 2) return 0;
    if(n % 2 == 0) return dfs(n / 2) + dfs(n / 2);
    else return dfs(n / 2) + dfs(n / 2 + 1) + 1;
}
int main(){
    int t; scanf("%d", &t);
    while(t --){
        int n; scanf("%d", &n);
        printf("%d\n", dfs(n));
    }
    return 0;
}

 

추천

출처blog.csdn.net/weixin_43911947/article/details/113405763