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语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码 ...
随机推荐
- A1084. Broken Keyboard
On a broken keyboard, some of the keys are worn out. So when you type some sentences, the characters ...
- 百度地图infoWindow圆角处理
最近的一个项目用到了百度地图API里边的infoWindow弹框,但是百度自带的infoWindow弹框是个直角的矩形框,显示过于难看,于是有了将该框改为圆角的想法,但是API本身不支持样式的设置,所 ...
- eclipse --- 新建JSP页面默认模版设置
设置 在eclipse中新建 jsp时是这样的: 有时候我们不想字符集是ISO_8859-1,想字符集是UTF-8,一个个修改会很麻烦,那么我们可以修改jsp模版的设置: window>Pref ...
- 跟我一起使用electron搭建一个文件浏览器应用吧(三)
第二篇博客中我们可以看到我们构建的桌面应用会显示我们的文件及文件夹. In the second blog, we can see that the desktop application we bu ...
- PrintNumber.java
/****************************************************************************** * Compilation: javac ...
- Java_myBatis_一对多映射
例如我们有需求需要实现以下查询 "一个用户对多条订单编号": select user.*,o.number,o.createtime from user left JOIN or ...
- 即将上线的Kafka 集群(用CM部署的)无法使用“--bootstrap-server”进行消费,怎么破?
即将上线的Kafka 集群(用CM部署的)无法使用“--bootstrap-server”进行消费,怎么破? 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.报错:org.a ...
- JavaEE学习总结(十三)—JavaWeb、JSP、Servlet与DVD管理系统
一.JSP基础知识 1.0.创建数据库与表 /* Navicat MySQL Data Transfer Source Server : 127.0.0.1 Source Server Version ...
- Linux 命令详解(十一)Shell 解析 json命令jq详解
前言 在自动化部署中涉及到shell脚本需要动态读取很多配置文件,最好是json格式. 更多jq信息: http://stedolan.github.io/jq/manual/ 一.根据key获取va ...
- 3 快速创建SpringBoot项目
一.Intellij IDEA 创建Spring Boot项目 1.创建工程 2.选择Spring Initializr 3.设置Maven版本管理参数 4.选择引用模块 5.命名工程名 6.选 ...