這道題不可以直接行列dp;
這樣乙個狀態可以從非常多且複雜的狀態更新過來;
很麻煩,不可取;
標算 這裡講的很好;
但是我們不用旋轉三角形,直接在dp的時候換一下順序就好啦;
#include
#include
#include
#include
#define ll long long
using namespace std;
int a[52][52],f[52][2000][52],sum[52][52];
int n,m,ans;
int main()
然後有些心得要說說;
你看程式裡面那個i,p兩個迴圈;
顯然在j比較大的時候i是不可以直接列舉到m的;
在j比較大的時候p也不可以列舉到i-k的;
所以我們一定要加限制;
其實我們只要加兩個裡面的乙個限制就好啦;
因為這個雖然i我沒加限制,但是因為p我限制了,所以不會列舉到一些不可能的狀態;
雖然i會出現不可能的情況,但是p限制了,所以i的不可能狀態不會被利用;
如果兩個都不限制就會萎了;
當然咯,最好全限制
洛谷P1437 HNOI2004 敲磚塊 dp
無 在乙個凹槽中放置了 n 層磚塊 最上面的一層有n 塊磚,從上到下每層依次減少一塊磚。每塊磚 都有乙個分值,敲掉這塊磚就能得到相應的分值,如下圖所示。14 15 4 3 23 33 33 76 2 2 13 11 22 23 31如果你想敲掉第 i 層的第j 塊磚的話,若i 1,你可以直接敲掉它 ...
洛谷 P1437 HNOI2004 敲磚塊
在乙個凹槽中放置了 n 層磚塊 最上面的一層有n 塊磚,從上到下每層依次減少一塊磚。每塊磚 都有乙個分值,敲掉這塊磚就能得到相應的分值,如下圖所示。14 15 4 3 23 33 33 76 2 2 13 11 22 23 31如果你想敲掉第 i 層的第j 塊磚的話,若i 1,你可以直接敲掉它 若i...
洛谷 1437 敲磚塊 DP
題意 中文題 題解 先旋轉三角形。然後要打掉第i行第j個,就要打掉第i行第j 1個和第i 1行第j 1個。所以到第i,j元素時,對於第i行,前j都被打掉,後面的都沒被打掉。但是對於第i 1行,前j 1一定被打掉,但後面的可以被打掉,也可以不打掉。所以狀態轉移就很好寫了。include include...