广告传媒网站模板,嘉峪关建设局公告网站,上海市工程咨询协会,罗岗网站建设解题思路:砍成1X1的单位方块#xff0c;需要n*m-1刀。如果说#xff0c;横、纵方向的每一刀的代价都一样的话。那很简单#xff0c;n方向最少砍n-1刀#xff0c;同理m方向最少要砍m-1刀#xff0c;(自己画图看看)。那么剩余的那几刀分给代价最少的去砍#xff0c;min(n-1…解题思路:砍成1X1的单位方块需要n*m-1刀。如果说横、纵方向的每一刀的代价都一样的话。那很简单n方向最少砍n-1刀同理m方向最少要砍m-1刀(自己画图看看)。那么剩余的那几刀分给代价最少的去砍min(n-1)*n的代价(m-1)*m的代价(n*m-n-m2)*两者最小的代价当然题目没有那么简单它每一刀的代价可能都不同我的思路是这样子的:1.一刀两断x方向砍了第一刀如果y方向要砍那么y要砍两刀代价*2。当然同x方向不用2.既然是这样那么代价高的就要少砍一些3.完毕注意事项:注意看题目我相信很多人和我一样以为只有4个输入。认真审题每一刀它都可能会给你一个不一样的代价输入案例真的有点坑人 2 2 3 3....参考代码:#include//用的是c,随便排一下序...void sort(int a[],int len){for(int i0;iint ki;for(int ji1;jif(a[k]kj;}}if(k!i){a[i]a[i]^a[k];a[k]a[i]^a[k];a[i]a[i]^a[k];}}}int main(){int n,m;scanf(%d%d,n,m);if(n1m1){printf(0);return 0;}int a[2000],b[2000];for(int i0;iscanf(%d,a[i]);}for(int i0;iscanf(%d,b[i]);}//对两个方向的代价排一下序sort(a,n-1);sort(b,m-1);int i0,j0; //用于记录a,b数组的下标int comt0; //总代价int x1,y1; //两个方向砍出来的木板数量while(iif(a[i]b[j]){ //谁大谁先砍comta[i]*y; //这里是乘以对面方向的块数i;x; //砍完一刀当然是数量增加啦}else{comtb[j]*x;j;y;}}if(in-1){ //处理一下上面的尾款...for(;jcomtb[j]*x;y;}}else{for(;icomta[i]*y;x;}}printf(%d,comt);}