tyvj p1264 艾澤拉斯的激流

2021-07-04 22:08:31 字數 1857 閱讀 1342

描述沿著卡利姆多北方邊界延展的破碎的海岸,在世界大**之前曾經是暗夜精靈首都艾薩琳的一部分,艾薩拉。惡魔從這個世界被消除,這片土地被撕碎並被大海吞沒,剩下的只有曾經雄偉城市的廢墟。自那以後,這個岩石交錯的島嶼、峭壁懸崖和珊瑚叢生的海洋成為許多傳說**。暗夜精靈們認為這是個被詛咒的地方,連經驗最豐富的船長都從這裡繞行。這裡有巨大的水生物,可怕的暗礁,強大的激流與巨浪。然而傳聞這裡水下有著驚人的寶藏,吸引了一支矮人探險隊前來。矮人們經過多日的探險,終於發現了在乙個水域下面有著未知的寶藏。但是這個海域常常有著激流與巨浪,矮人們不可能把探險艇停下來甚至逆流而上。

這個海域可以被描述為乙個w×l的矩形,分成個乙個個單元格。每個單元格代表的海域下面可能是寶藏,也可能是一塊可怕地礁石。從激流的上游開始,每過1秒探險艇就會被衝往下游的乙個單位。在被衝往下游的過程中,矮人們可以控制方向,選擇他的正前,左前邊,或右前邊的乙個單位。矮人們決定從這個激流的最上游的任意乙個單元格開始向下漂流,每經過乙個單元格就可以取走這個單元格上的寶藏。但是千萬不能碰到礁石,否則他的探險艇會支離破碎。請你安排乙個計畫,算出探險隊最多一共能拿到多少寶藏。                    

輸入格式

第1行,兩個整數w,l。

接下來的l行,每行w個整數,以「從上游到下游,面朝水流方向從左向右」的順序依次為每個單元格中的寶藏的數目,如果為-1則表示這個單元格是礁石。

輸出格式

乙個整數,表示得到的寶藏。                    

測試樣例1

輸入

3 5

5 1 3

-1 7 -1

5 1 10

4 -1 7

20 10 5

輸出

41

備註

上游->下游1 2 3 4 5

1   5 -1 5 4 20

2   1 7 1 -1 10

3   3 -1 10 7 5

如上表,探險隊從(1,1)開始,第1秒向右轉一下,被衝到(2,2)。第2秒向左轉一下,被衝到(3,1)。接下來第3秒正前行走,經過(4,1),(5,1),一共拿到5+7+5+4+20=41個單位的寶藏。

資料規模

1<=w<=1000

1<=l<=8000

所有涉及到的數字不會超過32位帶符號整型的範圍

根據題意,可以輕易想到用搜尋或者動態規劃來解決。考慮到資料規模,搜尋應該使用記憶化搜尋。這裡介紹逆推動態規劃演算法。

考慮是從第一行任意位置出發,所以最終狀態是max(f[1][1..w])。

由於只能向前、左前、右前移動,所以每乙個點的狀態由其下方、左下方、右下方轉移過來,所以動態轉移方程為:f[i][j]=max(f[i+1][j],f[i+1][j-1],f[i+1][j+1])+s[i][j],其中需要考慮邊緣的狀態。由於題目中說有障礙,所以將障礙點賦值為-maxlongint即可。

邊緣直接賦值為0即可。

#include#include#include#includeusing namespace std;

int n, m;

int s[8003][1004];

int f[8003][1004];

int main()

} for (i = 1; i <= n; i++)

for (i = (m - 1); i >= 1; i--)

) + s[i][j];

} }j = 0;

for (i = 1; i <= n; i++)

cout << j << endl;

return 0;

}

1264 線段相交

1264 線段相交 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出平面上兩條線段的兩個端點,判斷這兩條線段是否相交 有乙個公共點或有部分重合認為相交 如果相交,輸出 yes 否則輸出 no input 第1行 乙個數t,表示輸入的測試數量 1 t 1000 第2 t...

1264 線段相交

1264 線段相交 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出平面上兩條線段的兩個端點,判斷這兩條線段是否相交 有乙個公共點或有部分重合認為相交 如果相交,輸出 yes 否則輸出 no input 第1行 乙個數t,表示輸入的測試數量 1 t 1000 第2 t...

1264 積木大賽 (貪心

時間限制 1 sec 記憶體限制 128 mb 提交 62 解決 38 您該題的狀態 未開始 提交 狀態 討論版 春春幼兒園舉辦了一年一度的 積木大賽 今年比賽的內容是搭建一座寬度為n的大廈,大廈可以看成由n塊寬度為1的積木組成,第i塊積木的最終高度需要是hi。在搭建開始之前,沒有任何積木 可以看成...