Gym 101889E 記憶化搜尋

2021-08-28 16:35:32 字數 439 閱讀 4073

思維還是太將江華,開始一直想dp,就是這一位餘數固定時取最小的乙個字串,但是字串太大,賦值的時候超時,其實根本沒必要存字串,只要記憶化搜尋,看看[pos][res]這個狀態是否能構成就行,這樣的話1000*1000個狀態, 穩穩的,然後貪心從小列舉,第乙個可行的一定是最優解。

#includeusing namespace std;

const int n=1e3+10;

char s[n], ans[n];

int k, n;

int dp[n][n];

int dfs(int pos, int res)

}else

return ret;

}int main()

else

puts("*");

return 0;

}

GYM 101933E(記憶化搜尋)

用每個人的血量作為狀態去搜尋t飛,考慮題解中更好的搜尋方式 每種血量有多少個人作為狀態。這樣會減去很多重複的狀態,因為只要乘一下就得到了所有相同情況的和。雖然我不會算,但是直觀感受起來複雜度比較優秀。include include using namespace std typedef double...

GYM 101933E 狀態壓縮 記憶化搜尋

題意 我方有n個士兵,敵方有m個,每方士兵都有乙個血量,現在有k輪無差別炮火打擊,每次都會從存活的士兵中隨機選一人,這名士兵的hp就 1,問對方被團滅的概率有多大?思路 因為n和m的範圍很小,我們可以考慮暴力搜尋,中間使用記憶化。這裡狀態壓縮有乙個小技巧,我們的正常想法是 因為士兵總數最多只有10個...

記憶化搜尋

演算法上依然是搜尋的流程,但是搜尋到的一些解用 動態規劃 的那種思想和模式作一些儲存。一般說來,動態規劃總要遍歷所有的狀態,而搜尋可以排除一些無效狀態。更重要的是搜尋還可以剪枝,可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求...