hdu 5323 Solve this interesting problem(dfs)

题目链接:hdu 5323 Solve this interesting problem

逆向思维,每次向左或向右翻倍,知道左端点为0时,即恰好满足的情况,,处理处所有情况去取最小值。

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const ll inf = 0x3f3f3f3f;ll L, R, N;void dfs(ll l, ll r) {//printf("%lld %lld\n", l, r);if (l <= 0 || r >= 2 * R) {if (l == 0)N = min(N, r);return;}int k = r – l + 1;if (k > l)return;dfs(l – k, r);dfs(l – k – 1, r);dfs(l, r + k);if (k > 1)dfs(l, r + k – 1);}int main () {while (scanf("%lld%lld", &L, &R) == 2) {N = inf;dfs(L, R);printf("%lld\n", N == inf ? -1 : N);}return 0;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

我的眼泪流了下来,浇灌了下面柔软的小草,

hdu 5323 Solve this interesting problem(dfs)

相关文章:

你感兴趣的文章:

标签云: