BZOJ 3997 TJOI2015 組合數學

2021-07-31 06:38:34 字數 924 閱讀 8609

time limit: 20 sec  memory limit: 128 mb

submit: 936  solved: 679

[submit][status][discuss]

給出乙個網格圖,其中某些格仔有財寶,每次從左上角出發,只能向下或右走。問至少走多少次才能將財寶撿完。此對此問題變形,假設每個格仔中有好多財寶,而每一次經過乙個格仔至多只能撿走一塊財寶,至少走多少次才能把財寶全部撿完。

第一行為正整數t,代表資料組數。

每組資料第一行為正整數n,m代表網格圖有n行m列,接下來n行每行m個非負整數,表示此格仔中財寶數量,0代表沒有

輸出乙個整數,表示至少要走多少次。

13 3

0 1 5

5 0 0

1 0 0

10n<=1000,m<=1000.每個格仔中財寶數不超過10^6

將每乙個財寶抽象成乙個點,這就變成了乙個有向無環圖的最小路徑覆蓋,對於這類問題,我們知道最長反鏈=最小路徑覆蓋,所以求出這張圖的最長反鏈就可以了。對於乙個點,它的左上角是可以到達的,但是右上角不能,所以用f[i][j] 表示以i,j為左下角的矩形的最長反鏈,則f[i][j]=max(f[i][j+1],f[i-1][j],f[i-1][j+1]+a[i][j]).dp一遍就可以了

講的挺好,可惜 就不是我自己寫的

出處:

#include#include#include#include#include#include#define maxn 1010  

using namespace std;

int a[maxn][maxn];

long long dp[maxn][maxn];

int n,m,t;

int main()

return 0;

}

bzoj 3997 TJOI2015 組合數學

給出乙個網格圖,其中某些格仔有財寶,每次從左上角出發,只能向下或右走。問至少走多少次才能將財寶撿完。此對此問題變形,假設每個格仔中有好多財寶,而每一次經過乙個格仔至多只能撿走一塊財寶,至少走多少次才能把財寶全部撿完 x 這個點不能順路走到 y 當且僅當 y 在 x 的右上角 答案就是從左下角走到右上...

bzoj3997 TJOI2015 組合數學

我們要求最少路徑覆蓋,可以等價於求最大獨立集。我們要找到乙個權值和最大的點集 s 使得對於點集中任意兩個點 點i 和 點j 使得 點i 不能到 點j 就是要求 點i 嚴格在 點j 的右上方或左下方。用dp可以在 o n 2 內解決。include include include include in...

BZOJ3997 TJOI2015 組合數學

傳送門 根據dilworth定理 偏序集的最小鏈劃分 最長反鏈 對於這題來說,把圖建出來 可以發現圖是乙個dag 題目等價於求最小路徑覆蓋 如果直接用網路流求的話t飛 發現是個偏序問題,所以dag上的最小路徑覆蓋 最長反鏈 即現在要找的東西就是乙個集合s 所有的i,j不可達 求最大權值和 簡單dp一...