小 z 是個特別墮落的小朋友,上數學課的時候經常有奇奇怪怪的想法。小 z 的的包裡有塊 n*m 的長方形木板,小 z 想把木板全部切成 1*1 的小正方形(用來玩拼圖)。但木板本身並不均勻,因此從不同的線切割下去要花不同的代價。而且對於一塊木板,切割一次以後就被分割成兩塊,而且由於不能把這兩塊木板拼在一起然後一刀切成四塊(動靜太大),所以只能兩塊分別再進行一次切割。現在小 z 並不想花太多的力氣,所以他來找你幫他求一求最小的代價。小 z 是個特別墮落的小朋友,上數學課的時候經常有奇奇怪怪的想法。小 z 的的包裡有塊 n*m 的長方形木板,小 z 想把木板全部切成 1*1 的小正方形(用來玩拼圖)。但木板本身並不均勻,因此從不同的線切割下去要花不同的代價。而且對於一塊木板,切割一次以後就被分割成兩塊,而且由於不能把這兩塊木板拼在一起然後一刀切成四塊(動靜太大),所以只能兩塊分別再進行一次切割。現在小 z 並不想花太多的力氣,所以他來找你幫他求一求最小的代價。
由排序不等式
順序和》亂序和》逆序和
我們可知,一定要把花費較大的切法放在前面切,因為切的次數是不下降的,而花費較大的放在前面切和不下降的刀數的乘積之和就是逆序和,是最優的。
#includeusingnamespace
std;
#define n 100100
#define ll long longll n,m,cx=1,cy=1
,cnt,ans;
struct
a[n*4
];template
inline
void read(t &x)
while(ch>='
0'&&ch<='9')
x*=f;
}bool cmp(email a,email b)
intmain()
printf(
"%lld\n
",ans);
return
0;
}
NOIP模擬 切木板
題目 有乙個 m n 的矩形木板。你需要把這個木板切成 1 1 的小方塊,也就是豎著切 n 1 刀 橫著切 m 1 刀。橫著切第 i 個位置的權值為 xi 豎著切第 j 個位置的權值為 yj 切某一刀時的費用為切這一刀的權值乘上切過的塊數。請你安排切的順序使得所有費用之和最小。輸入格式 第一行兩個數...
NOIP模擬 切木板(貪心)
有乙個 m n 的矩形木板。你需要把這個木板切成 1 1 的小方塊,也就是豎著切 n 1 刀 橫著切 m 1 刀。橫著切第 i 個位置的權值為 xi 豎著切第 j 個位置的權值為 yj 切某一刀時的費用為切這一刀的權值乘上切過的塊數。請你安排切的順序使得所有費用之和最小。第一行兩個數 m,n 接下來...
NOIP模擬 切木板(貪心)
有乙個 m n 的矩形木板。你需要把這個木板切成 1 1 的小方塊,也就是豎著切 n 1 刀 橫著切 m 1 刀。橫著切第 i 個位置的權值為 xi 豎著切第 j 個位置的權值為 yj 切某一刀時的費用為切這一刀的權值乘上切過的塊數。請你安排切的順序使得所有費用之和最小。第一行兩個數 m,n 接下來...