hdu5693D 遊戲 區間DP 暴力遞迴

2022-05-13 16:35:56 字數 1373 閱讀 5724

主要的收穫是。。如何優化你遞推式裡面不必要的決策

之前的**

這個**在hdu超時了,這就對了。。這個複雜度**。。

但是這個思路非常地耿直。。那就是只需要暴力列舉刪兩個和刪三個的情況,於是就非常耿直的列舉是哪兩個n^2,是哪三個n^3

#include #include 

#include

#include

using

namespace

std;

intt,n,m;

int a[305],d[305

];bool f[305][305

];//

定向從左往右刪除

int dp[305][305

];int dfs(int l,int

r) }

//列舉刪三個

for(i=l;ii)

for(j=i+1;jj)

for(k=j+1;k<=r;++k)

}return dp[l][r]=p;

}void

solve()}}

for(i=l;ii)}}

}}

}}int

main()

return0;

}

我們發現了乙個列舉的方法是

在區間[l,r],要麼我們只取l,r這兩個數刪掉

要麼列舉在區間[l,r]內的分割點k,於是我們只需要考慮l,k,r這三個數能不能刪掉

注意到我們l,r是必選的。。這樣就不能形成最後一次刪掉的數字在中間

於是我們列舉l,r不是必選的情況,遞迴分成兩個子區間,將這個不選的決策交給子區間,這樣我們就發現有了這個分解的步驟

即使採用了上述前兩個策略。。憑藉只用短長度區間l,r全選和,l,k,r全選就能形成所有的決策,我認為這個想法是非常巧妙的

雖然大佬們認為可能這很顯然orz,但是不得不說這種遞迴策略非常巧妙。。可能是我還沒掌握精髓吧。。

放上1499ms/3000ms的**

細節:小心r越界,因為我的len一直列舉到n,

#include #include 

#include

#include

using

namespace

std;

intt,n,m;

int a[305],d[305

];bool f[305][305

];//

定向從左往右刪除

int dp[305][305

];void

solve()

for(k=l;k<=r;++k)}}

}}int

main()

return0;

}

題解 hdu5693 D Game 區間DP

題目鏈結 區間dp好題,把區間dp的基本操作都用上了。狀態轉移方程很多,見 吧 include include include includeusing namespace std const int n 310 int t,n,m,a n d,dp n n f n bool can n n map...

2D遊戲vs3D遊戲

前幾天,小李子一直在糾纏3d,偽3d遊戲等。雖說小李子效力於大公司,但是該公司畢竟不是專業的遊戲公司。美工xx等一概不全,要使用個3d引擎做個ipad,android的遊戲。這年頭是怎麼了。遊戲最主要的是什麼?是畫面?還是互動的畫面?還是互動的立體畫面?接觸過這麼多遊戲,還沒有見過只以最精緻的畫面獲...

2D遊戲vs3D遊戲

前幾天,小李子一直在糾纏3d,偽3d遊戲等。雖說小李子效力於大公司,但是該公司畢竟不是專業的遊戲公司。美工xx等一概不全,要使用個3d引擎做個ipad,android的遊戲。這年頭是怎麼了。遊戲最主要的是什麼?是畫面?還是互動的畫面?還是互動的立體畫面?接觸過這麼多遊戲,還沒有見過只以最精緻的畫面獲...