題目描述
出於某些方面的需求,我們要把一塊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 表示黑格。輸出格式 乙個正整數...