PAT甲級 暴力搜尋

2022-05-02 20:24:11 字數 2391 閱讀 4289

1.bfs

1091 acute stroke (30point(s))

基礎的搜尋,但是直接用遞迴會導致段錯誤,改用佇列之後就不會了,這說明遞迴呼叫在空間利用率上還是很吃虧的。

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define inf 0x3f3f3f

#define pii pair#define pb push_back

using

namespace

std;

const

int maxn = 1e5+100

;int

n, m, l, t;

int cnt, res, mp[70][200][1500

];bool vis[70][200][1500

];void dfs(int x, int y, int

z)int

main() }}

}printf("%d

", res);

}

segmentation fault(dfs)

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define inf 0x3f3f3f

#define pii pair#define pb push_back

using

namespace

std;

const

int maxn = 1e5+100

;struct

node;

intn, m, l, t;

int cnt, res, mp[70][200][1500

];bool vis[70][200][1500

];void bfs(int x, int y, int

z));

int cnt = 0

;

while(!que.empty())), que.push(), que.push();

que.push(), que.push(), que.push();

}if(cnt>=t) res +=cnt;

}int

main()

accepted(bfs)

reference:

2.dfs

1103 integer factorization (30分)

這題就是dfs+剪枝,剪枝不夠的話有幾個測試樣例會超時,主要體現在:

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define inf 0x3f3f3f

#define pii pair#define pb push_back

using

namespace

std;

//const int maxn = 1e5+100;

intn, k, p;

int cnt, sum, fac[400

];//

string s("", 400), res("", 400);

vectornow, res;

int qpow(int a, int

n)

return

res;

}void

init()

void dfs(int num, int

id)

int r = id > 0 ? now[id-1] : pow(num, 1.0/p);

for(int i = r; i >= 1; i--)

}int

main()

else printf("

impossible");

}

view code

浙大pat甲級 1024

可用3個vector來進行處理,先將輸入的數字都壓入到第1第2個vector中,從i 0到k迴圈判斷是否為對稱數,如果不是對稱數則將其與倒轉數相加,並將得到的每一位數加入到第三個vector的頭部,並將新的第三個vector重新賦值給第一第二,直到該數為對稱數或i k結束迴圈。ac include ...

浙大PAT甲級 1039

一開始想到用map 但是會超時。由於題目中的名字由三個字母和乙個數字組成,因此有26 26 26 10種,因此可以用hash來做。使用setmm max max 26 26 26 10 5 同時輸入名字時也應改為char s 5 scanf來輸入。ac include include include...

浙大PAT甲級 1045

這個題考查dp,最長非遞減序列。dp i 表示以a i 為結尾的最長非遞減序列。初始化dp為1,狀態轉移方程為dp i max 1,dp j 1 j特別注意 沒有出現在最喜愛的序列中的數,其優先順序為0,在考慮最長非遞減序列時,應直接忽略0。ac include include include in...