EOJ 1065 糖果盒(懸線法)

2021-10-08 04:06:58 字數 1251 閱讀 9246

乙個被分為 n*m 個格仔的糖果盒,第 i 行第 j 列位置的格仔裡面有 a [ i ][ j ] 顆糖。本來 tenshi 打算送這盒糖果給某 ppmm 的,但是就在要送出糖果盒的前一天晚上,乙隻極其可惡的老鼠夜襲糖果盒,有部分格仔被洗劫並且穿了洞。tenshi 必須盡快從這個糖果盒裡面切割出乙個矩形糖果盒,新的糖果盒不能有洞,並且 tenshi 希望保留在新糖果盒內的糖的總數盡量多。

請幫 tenshi 設計乙個程式 計算一下新糖果盒最多能夠保留多少糖果。

輸入格式

從標準輸入讀入資料。第一行有兩個整數 n、m。第 i + 1 行的第 j 個數表示 a [ i ][ j ],如果這個數為 0 ,則表示這個位置的格仔被洗劫過。其中:

1 ≤ n,m ≤ 1000

0 ≤ a [ i ][ j ]≤ 255

輸出格式

輸出最大糖果數到標準輸出。

樣例input

3 41 2 3 4

5 0 6 3

10 3 4 0

output

17思路:

這篇**裡的題

使用懸線法,列舉極大子矩陣然後求這個子矩陣的和,複雜度是n^2的

不過你也可以把壞點設成-inf,然後dp求最大子矩陣和;但這個演算法貌似只能n^3。

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

1005

;int a[maxn]

[maxn]

,dp[maxn]

[maxn]

;int l[maxn]

[maxn]

,r[maxn]

[maxn]

,up[maxn]

[maxn]

;int

main()

}int ans =0;

for(

int i =

1;i <= n;i++

)else

}for

(int j = m;j >=

1;j--

)else}}

printf

("%d\n"

,ans)

;return0;

}

EOJ 莫干山奇遇

出題人當然是希望出的題目有關oxx,於是想方設法給題目配上一些有關oxx的背景故事,使得它看起來不那麼無趣。但有的時候卻無法引入合適的小姐姐,使得oxx顯得非常可憐。所以出題人刪除了故事,只留下乙個枯燥乏味的數學問題。故事已刪除 給乙個長度為n的序列a1,a2,an,求乙個長度為m的序列b1,b2,...

模擬106 題解

顯然的區間dp。斷環成鏈,預處理出每個連續區間集合的元素個數。然後直接dp就完了。想了一些簡單的貪心,然後都偽了。所以考慮如何暴力 o n 2 來做這個題。列舉最終用來跳最後一步的藥丸,顯然前面的藥丸可以按 a i b i 排序。然後考慮如何優化這個過程,問題在於如何判斷溺水的情況。溺水的情況只出現...

10 6 拓撲排序

拓撲排序的重要應用 判斷乙個給定的圖是否是 有向無環 圖 這道題也沒啥好說的,就是注意一點 用queue結果wa了,樣例結果是0 3 1 2,題目中說 請按照題目描述中的演算法依次輸出圖的拓撲有序序列 題中用的是stack,所以將queue改為stack後ac,樣例結果3 0 1 2 這兩個答案其實...