洛谷 P1324 矩形分割 貪心

2021-09-29 04:17:27 字數 1403 閱讀 2064

題目描述

出於某些方面的需求,我們要把一塊n×m的木板切成乙個個1×1的小方塊。

對於一塊木板,我們只能從某條橫線或者某條豎線(要在方格線上),而且這木板是不均勻的,從不同的線切割下去要花不同的代價。而且,對於一塊木板,切割一次以後就被分割成兩塊,而且不能把這兩塊木板拼在一起然後一刀切成四塊,只能兩塊分別再進行一次切割。

現在,給出從不同的線切割所要花的代價,求把整塊木板分割成1×1塊小方塊所需要耗費的最小代價。

輸入格式

輸入檔案第一行包括n和m,表示長n寬m的矩陣。

第二行包括n-1個非負整數,分別表示沿著n-1條橫線切割的代價。

第三行包括m-1個非負整數,分別表示沿著m-1條豎線切割的代價。

輸出格式

輸出乙個整數,表示最小代價。

輸入輸出樣例

輸入 #1

2 23

3輸出 #1

9說明/提示

資料範圍:

對於60%的資料,有1 ≤ n ,m≤ 100;

對於100%的資料,有1 ≤ n,m ≤ 2000。

前言:這是什麼水題啊,隨便一打就過了

因為我們需要把乙個木板切為全部為1 * 1的,所以我們不管怎麼切,結果是一樣的,但是如果把花費更高的放到後面,肯定他需要的切的也會更多,所以我們先按花費從大到小排好序,這樣花費是最小的

我們再定義兩個變數,分別記錄橫著的木塊有幾個和豎著的木塊有幾個,這樣後面切的話,如果是豎著切就乘上橫著的塊,再把豎著的塊+1

反手加上乙個register和快讀,可以更優

ac**

#include

#include

#define re register int

using

namespace std;

struct node e[

4004];

int n,m,h=

1,z=

1,cnt;

long

long ans;

inline

intread()

while

(ch>=

'0'&&ch<=

'9')

return x*cf;

}inline

bool

cmp(node a,node b)

intmain()

for(re i=

1;i)sort

(e+1

,e+cnt+

1,cmp)

;for

(re i=

1;i<=cnt;i++

)else

}printf

("%lld"

,ans)

;return0;

}

矩形分割(洛谷 P1324)

題目描述 出於某些方面的需求,我們要把一塊n m的木板切成乙個個1 1的小方塊。對於一塊木板,我們只能從某條橫線或者某條豎線 要在方格線上 而且這木板是不均勻的,從不同的線切割下去要花不同的代價。而且,對於一塊木板,切割一次以後就被分割成兩塊,而且不能把這兩塊木板拼在一起然後一刀切成四塊,只能兩塊分...

洛谷P1191 矩形

給出乙個n n的矩陣,矩陣中,有些格仔被染成白色,有些格仔被染成黑色,現要求矩陣中白色矩形的數量 輸入格式 第一行,乙個整數n,表示矩形的大小。接下來n行,每行n個字元,這些字元為 w 或 b 其中 w 表示白格,b 表示黑格。輸出格式 乙個正整數,為白色矩形數量 輸入樣例 1 4 wwbw bbw...

洛谷P1191 矩形

給出乙個n nn times nn n的矩陣,矩陣中,有些格仔被染成白色,有些格仔被染成黑色,現要求矩陣中白色矩形的數量 輸入格式 第一行,乙個整數nnn,表示矩形的大小。接下來nnn行,每行nnn個字元,這些字元為 www 或 bbb 其中 www 表示白格,bbb 表示黑格。輸出格式 乙個正整數...