贪心|[贪心] 矩形分割



描述 Description


出于某些方面的需求,我们要把一块N×M的木板切成一个个1×1的小方块。
对于一块木板,我们只能从某条横线或者某条竖线(要在方格线上),而且这木板是不均匀的,从不同的线切割下去要花不同的代价。而且,对于一块木板,切割一次以后就被分割成两块,而且不能把这两块木板拼在一起然后一刀切成四块,只能两块分别再进行一次切割。
现在,给出从不同的线切割所要花的代价,求把整块木板分割成1×1块小方块所需要耗费的最小代价。






【贪心|[贪心] 矩形分割】


输入格式 Input Format


输入文件第一行包括N和M,表示长N宽M的矩阵。
第二行包括N-1个非负整数,分别表示沿着N-1条横线切割的代价。
第二行包括M-1个非负整数,分别表示沿着M-1条竖线切割的代价。









输出格式 Output Format


输出一个整数,表示最小代价。








样例输入 Sample Input [复制数据]


2 2 3 3







样例输出 Sample Output [复制数据]


9







时间限制 Time Limitation


1s








注释 Hint


对于60%的数据,有1 ≤ N ,M≤ 100;
对于100%的数据,有1 ≤ N,M ≤ 2000。




开始以为是动态规划.想了想发现是贪心.
可以观察到切的刀数是固定的,n*m-1刀.
而且对于一个代价,越到后面切,代价越大.
自然想到应该使代价大的尽量早点切。
所以给代价排个序,标记一下横 纵
当我们想横着切一刀的时候{画一条穿过矩形的线}
代价为 竖着切的次数*代价
竖着切是横着切的次数*代价
所以给代价排个序,随便搞搞就没了。

第一个自己想出来的贪心。。。给输入坑了次。。
var n,m,i,ans,l,r:longint; a,f:array[1..4000]of longint; procedure qsort(l,r:longint); var i,j,s,x:longint; begin i:=l; j:=r; x:=a[(l+r)div 2]; while i<=j do begin while a[i]>x do inc(i); while a[j]



    推荐阅读