组合题

(魔法数字)小 H 的魔法数字是 4。给定n,他希望用若干个 4 进行若干次加法、减法和整除运算得到 n。但由于小 H 计算能力有限,计算过程中只能出现不超过M = 10000 的正整数。求至少可能用到多少个 4。

例如,当 n = 2 时,有 2 = (4 + 4)/4,用到了 3 个 4,是最优方案。

试补全程序。


#include <iostream>

#include <cstdlib>

#include <climits>


using namespace std;


const int M = 10000;

bool Vis[M + 1];

int F[M + 1];


void update(int &x, int y) {

if (y < x)

x = y;

}


int main() {

int n;

cin >> n;

for (int i = 0; i <= M; i++)

F[i] = INT_MAX;

①;

int r = 0;

while (②) {

r++;

int x = 0;

for (int i = 1; i <= M; i++)

if (③)

x = i;

Vis[x] = 1;

for (int i = 1; i <= M; i++)

if (④) {

int t = F[i] + F[x];

if (i + x <= M)

update(F[i + x], t);

if (i != x)

update(F[abs(i - x)], t);

if (i % x == 0)

update(F[i / x], t);

if (x % i == 0)

update(F[x / i], t);

}

}

cout << F[n] << endl;

return 0;

}

第1题 单选题

①处应填( )

A

F[4] = 0

B

F[1] = 4

C

F[1] = 2

D

F[4] = 1

第2题 单选题

②处应填( )

A

!Vis[n]

B

r < n

C

F[M] == INT_MAX

D

F[n] == INT_MAX

第3题 单选题

③处应填( )

A

F[i] == r

B

!Vis[i] && F[i] == r

C

F[i] < F[x]

D

!Vis[i] && F[i] < F[x]

第4题 单选题

④处应填( )

A

F[i] < F[x]

B

F[i] <= r

C

Vis[i]

D

i <= x

赣ICP备20007335号-2