分支界限篇 加1乘2平方NOJ1541

2021-10-10 10:36:59 字數 1163 閱讀 6557

時限:1000ms 記憶體限制:10000k 總時限:3000ms

給定兩個正整數m、n,問只能做加1、乘2和平方這三種變化,

從m變化到n最少需要幾次

輸入兩個10000以內的正整數m和n,且m小於n

輸出從m變化到n的最少次數

對每個位置從1開始進行試探,並且保證當前所試的數字

(1)與之前填過的數字不重複

(2)與前一位置的數的和為素數

(3)最後乙個填寫的數與第乙個填寫的數之和是素數

在填寫第k個位置時,如果滿足上述約束條件,則繼續填

寫第k+1個位置;如果1~20個數都無法填寫到第k個位置,

則取消對第k個位置的填寫,回溯到第k-1個位置

1> 解向量:

2> 解空間樹:排列樹,(n-1)!個葉子結點

3> 剪枝函式:isprime( x[t-1]+x[t] ),

t=2,3,···,n 約束函式

#include

#include

using namespace std;

int m,n;

int visited[

10000];

int step[

10000];

queue<

int> num;

void

bfs(

int m,

int n)

;bool check_ok

(int num)

;int

make_new_place

(int root,

int type)

;int

main()

void

bfs(

int m,

int n)}}

}int

make_new_place

(int root,

int type)

return0;

}bool check_ok

(int num)

else

return true;

}

還有點問題……數字一大它就不輸出了……

NOJ 1541 加1乘2平方

2016.11.3 題目描述 1541.加1乘2平方 時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 給定兩個正整數m n,問只能做加1 乘2和平方這三種變化,從m變化到n最少需要幾次 輸入 輸入兩個10000以內的正整數m和n,且m小於n 輸出 輸出從m變化到n的最少次數...

加1乘2平方

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述最簡單的佇列的使用 include include using namespace std queueq1 int main 給定兩個正整數m n,問只能做加1 乘2和平方這三種變化,從m變化到n最少需要幾次 輸入輸入兩個100...

加1乘2平方

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述最簡單的佇列的使用 include include using namespace std queueq1 int main 給定兩個正整數m n,問只能做加1 乘2和平方這三種變化,從m變化到n最少需要幾次 輸入輸入兩個100...