HNOI 2004 敲磚塊 解題報告

2021-07-24 14:36:51 字數 740 閱讀 4586

hnoi2004 敲磚塊

一道dp題,把其看成乙個直角三角形,敲第

i 列的第j塊時,第i+

1列至少是敲了j−

1 塊的 s[

i][j

][k]

是敲掉第

i 列第

j塊一共敲了

k 塊的最大分值,那麼轉移方程為 s[

i][j

][k]

=max

(s[i

+1][

h][k

−j](

j−1≤

h≤n−

i))+

∑h=1

ja[h

][i]

時間複雜度o(

n3m)

**如下

/*

my convictions will not falter.--poppy

*/#include

#include

#include

#include

#include

using namespace std;

int n,m,ans,a[55][55],s[55][55][700],sum[55][55];

int read()

int main()

printf("%d",ans);

}

ps:還有字首和優化的時間複雜度為o(

n2m)

的大神做法

HNOI2004 敲磚塊 解題報告

p1437 敲磚塊 很自然地,看到這道題我們會想到數字三角形。可惜的是,我們發現 不能簡單地將乙個點的左上角與右上角的值進行比較,因為選擇數可能會有重疊。不妨畫畫圖,看看我們選擇的是怎樣乙個圖形把。比如上面這個東西。我們發現,選擇的數永遠是若干個三角的重疊。我們考慮按照這個輪廓進行轉移。令 sum ...

HNOI2004 打鼴鼠 解題報告

這個題一上來就想到了是o m2 的dp,但是沒有想到優化,導致跑得比較慢。當然其實對於這個題而言優化有無是無所謂的,但是這個優化的思想還是很好的。我一開始是想得用前面的去更新後面的,而如果我們反著來想的話,就可以發現乙個優化了。設f i 表示最後到i可以取得的最大數量,那麼顯然有方程fi max 這...

洛谷 P1437 HNOI2004 敲磚塊

在乙個凹槽中放置了 n 層磚塊 最上面的一層有n 塊磚,從上到下每層依次減少一塊磚。每塊磚 都有乙個分值,敲掉這塊磚就能得到相應的分值,如下圖所示。14 15 4 3 23 33 33 76 2 2 13 11 22 23 31如果你想敲掉第 i 層的第j 塊磚的話,若i 1,你可以直接敲掉它 若i...