Ex 6_14 布料剪裁问题_第八次作业

子问题定义: 定义p[i][j]为布料宽为i,高为j的最优产出,每次剪下一块布料,剩余布料最多形成三块矩阵面料。每次剪裁会有两种情况,水平切割布料,其次是将布料旋转90度后在切割布料。
递归关系:

初值设定:
p[0][h]=0
p[w][0]=0
求解顺序:
依次求解二维数组p的每一行,每一列,最终的结果为p[布料的宽][布料的高]
package org.xiu68.ch6.ex8;
public class Ex6_14 {
//布料剪裁问题
public static void main(String[] args) {
// TODO Auto-generated method stub
Clothing[] cloths=new Clothing[]{
new Clothing(10,10,10),
new Clothing(20,20,10),
new Clothing(30,30,30),
new Clothing(40,40,160)
};
tailor(10,10,cloths); //生产出的产品最高价为: 10
tailor(40,40,cloths); //生产出的产品最高价为: 160
Clothing[] cloths2=new Clothing[]{
new Clothing(10,10,10),
new Clothing(10,10,11),
new Clothing(20,20,10),
new Clothing(30,30,30),
new Clothing(40,40,180)
};
tailor(10,10,cloths2); //生产出的产品最高价为: 11
tailor(40,40,cloths2); //生产出的产品最高价为: 180
}
/*
* w:布料的宽
* h:布料的高
* cloths:服装产品
* 一块布切割后,最多剩下3块
*/
public static void tailor(int w,int h,Clothing[] cloths){
if(w<=0 || h<=0)
return;
int[][] p=new int[w+1][h+1]; //p[i][j]表示布料宽为i,高为j所得到的最大价格
//求布料的宽为i,高为j所得到的最大价格
for(int i=1;i<=w;i++){
for(int j=1;j<=h;j++){
p[i][j]=0;
for(int k=0;k<cloths.length;k++){
int kWidth=cloths[k].width, //第k件服装的需要布料的宽
kHeight=cloths[k].height, //第k件服装的需要布料的高
kPrice=cloths[k].price, //第k件服装的价格
horizontalCut=0, //水平切割布料所得到的最大价格
verticalCut=0; //旋转布料90度后再切割布料所得到的最大价格
if(i>=cloths[k].width && j>=cloths[k].height) //水平切割
horizontalCut=kPrice+p[kWidth][j-kHeight]+p[i-kWidth][kHeight]+p[i-kWidth][j-kHeight];
if(i>=cloths[k].height && j>cloths[k].width) //旋转布料90度后再切割
verticalCut=kPrice+p[kHeight][j-kWidth]+p[i-kHeight][kWidth]+p[i-kHeight][j-kWidth];
if(horizontalCut>verticalCut){
if(horizontalCut>p[i][j])
p[i][j]=horizontalCut;
}else{
if(verticalCut>p[i][j])
p[i][j]=verticalCut;
}
}//for3
}//for2
}//for1
System.out.println("生产出的产品最高价为: "+p[w][h]);
}
}
//服装
class Clothing{
public int width; //宽
public int height; //高
public int price; //价格
public Clothing(int width, int height, int price) {
super();
this.width = width;
this.height = height;
this.price = price;
}
}
Ex 6_14 布料剪裁问题_第八次作业的更多相关文章
- Ex 6_21 最小点覆盖问题_第八次作业
子问题定义: 对于图中的每个结点,有两种状态,即属于最小点覆盖和不属于最小点覆盖,定义minSet[i][0]表示结点i属于点覆盖,并且以i为根的树的最小点覆盖的大小.minSet[i][1]表示点i ...
- Ex 6_5棋子放置问题_第八次作业
题目貌似有问题 (b) 子问题定义: 设maxValue[i][j]为棋盘的前i行中最后一行为i时第i行按照第j种放置方式放置时得到的最大覆盖值,comp[i][j]为第i种放置方式与第j种放置方式是 ...
- JAVA第八次作业
JAVA第八次作业 (一)学习总结 1.用思维导图对本周的学习内容进行总结 参考资料: XMind. 2.通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery ...
- oo第八次作业
oo第八次作业 第五次作业分析: 1.度量图: 2.类图: 第五次作业由于是第一次接触多线程,所以导致自己的经验不足,因此最终也没有完成作业,到最后任然不能实现三部电梯的有效调度,所以导致了这次作业的 ...
- 2017-2018-2 1723《程序设计与数据结构》第八周作业 & 实验二 & 第一周结对编程 总结
作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第八周作业
2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-o ...
- 2017-2018-1 JAVA实验站 第八周作业
2017-2018-1 JAVA实验站 第八周作业 详情请见团队博客
- 2017-2018-1 JaWorld 第八周作业
2017-2018-1 JaWorld 第八周作业 团队分工 成员 分工 陈是奇 统计成员工具选择 马平川 类图 王译潇 编码规范 李昱兴 用例图 林臻 状态图 张师瑜 推进工作进展.写博客 UML ...
- 2017-2018-1 20179205《Linux内核原理与设计》第八周作业
<Linux内核原理与设计>第八周作业 视频学习及操作分析 预处理.编译.链接和目标文件的格式 可执行程序是怎么来的? 以C语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码 ...
随机推荐
- LOJ#2320 生成树计数
解:讲一个别的题解里我比较难以理解的地方,就是为什么可以把这两个东西合起来看成某一个连通块指数是2m而别的指数都是m. 其实很好理解,但是别人都略过了......把后面的∑提到∏的前面,然后展开,也可 ...
- 【洛谷P1379】八数码难题 状压bfs
对于这道题来说,每个时刻的状态是整个棋盘所有棋子的位置,即:任何一个棋子位置发生了移动,都会使得状态转移. 因此,需要采取将整个状态作为广搜的搜索对象,进行状态压缩.采用哈希得到每个状态的对应的数值, ...
- CSS3:文字属性
文字属性注意的细节: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- teleport使用说明
teleport使用说明 浏览器下载网页:只能浏览主页和少数网页,其它不能浏览,容量几百kb teleport下载项目一能完全离线看网页,7328多文件 9个JPG文件,大小134M te ...
- 设计模式---对象创建模式之构建器模式(Builder)
一:概念 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象 ...
- Windows环境墙内搭建Go语言集成开发环境
1 安装go环境 太简单略 2 安装vs code 找到微软的官方网站,下载Visual Studio Code,官网地址https://code.visualstudio.com/ 安装完成后进入V ...
- java中常用的包及作用
1. java.awt:提供了绘图和图像类,主要用于编写GUI程序,包括按钮.标签等常用组件以及相应的事件类. 2. java.lang:java的语言包,是核心包,默认导入到用户程序,包中有obje ...
- 地图上道路编号中的G S X Y
地图上道路中的G S X Y Z C D,分别表示什么道? 国道 省道 县道 乡道 专用道路 村道 D: 还没有搞明白
- JAVA中equals方法与hashCode方法学习
首先参考文章:http://www.oschina.net/translate/working-with-hashcode-and-equals-methods-in-java 1,equals方法的 ...
- IDAPython学习(一)
1.概述 IDAPython在IDA中集成了Python解释器,除了提供了Python功能外,使用这个插件还可以编写实现IDC脚本语言的所有Python脚本. IDAPython显著优势在于,它可以充 ...