zcmu1374:最大のナルト軍(再帰的)

タイトルリンク:https//acm.zcmu.edu.cn/JudgeOnline/problem.php?id = 1374

トピック

忍者シャドウクローン。忍者にはn点チャクラがあります。チャクラの数が1を超えると、シャドウクローンを作成し、ファントムを作成し、それらをai点チャクラに分割して、2点チャクラを残し、同時に体の疲労値を増加させることができます| ai -bi |、ファントムそして、チャクラの数が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