1. 程式人生 > >關於dp方案記錄的方法思考與優化

關於dp方案記錄的方法思考與優化

pri () for 逆序 htm logs cto com 代碼

一般的方法是記錄狀態是從哪兒轉移來的然後遞歸輸出。

但是明顯遞歸有爆棧的危險。

所以可以用一個 (增加理解難度而實際沒用的) 方法來避免。

具體來說,用一個vector保存答案。

例如這一題中,一般題解是用

void print(int x,int y)
{
    if(pre[x][y]==y)
    {
        cout<<y<<" ";
        return;
    }

    print(x-1,pre[x][y]);
    cout<<y<<" ";//記得輸出是逆序的
}

來輸出的,而我用了

int x = F;
std::vector
<int> v; for(; x >= 1; y = pre[x][y], x--) v.push_back(y); reverse(v.begin(), v.end()); cout<<ans<<endl; for(int i = 0; i < (int) v.size(); i++) cout<<v[i]<<" "; puts("");

來處理。

有什麽用呢?增加代碼長度與理解難度(笑)

關於dp方案記錄的方法思考與優化