用每個人的血量作為狀態去搜尋t飛,考慮題解中更好的搜尋方式:每種血量有多少個人作為狀態。這樣會減去很多重複的狀態,因為只要乘一下就得到了所有相同情況的和。
雖然我不會算,但是直觀感受起來複雜度比較優秀。
#include #include using namespace std;
typedef double db;
typedef long long ll;
int n, m, d, mod = 1e6;
int cnt[2][10];
unordered_mapmp;
void read(int n, int k)
}ll tran(ll res = 0)
db dfs(ll t, int depth)
} }return mp[t] = res;
}int main()
GYM 101933E 狀態壓縮 記憶化搜尋
題意 我方有n個士兵,敵方有m個,每方士兵都有乙個血量,現在有k輪無差別炮火打擊,每次都會從存活的士兵中隨機選一人,這名士兵的hp就 1,問對方被團滅的概率有多大?思路 因為n和m的範圍很小,我們可以考慮暴力搜尋,中間使用記憶化。這裡狀態壓縮有乙個小技巧,我們的正常想法是 因為士兵總數最多只有10個...
Gym 101889E 記憶化搜尋
思維還是太將江華,開始一直想dp,就是這一位餘數固定時取最小的乙個字串,但是字串太大,賦值的時候超時,其實根本沒必要存字串,只要記憶化搜尋,看看 pos res 這個狀態是否能構成就行,這樣的話1000 1000個狀態,穩穩的,然後貪心從小列舉,第乙個可行的一定是最優解。includeusing n...
記憶化搜尋
演算法上依然是搜尋的流程,但是搜尋到的一些解用 動態規劃 的那種思想和模式作一些儲存。一般說來,動態規劃總要遍歷所有的狀態,而搜尋可以排除一些無效狀態。更重要的是搜尋還可以剪枝,可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求...