1.bfs
1091 acute stroke (30point(s))
基礎的搜尋,但是直接用遞迴會導致段錯誤,改用佇列之後就不會了,這說明遞迴呼叫在空間利用率上還是很吃虧的。
#include #includesegmentation fault(dfs)#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);
}
#include #includeaccepted(bfs)#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()
reference:
2.dfs
1103 integer factorization (30分)
這題就是dfs+剪枝,剪枝不夠的話有幾個測試樣例會超時,主要體現在:
#include #includeview code#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");
}
浙大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...