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语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码 ...
随机推荐
- Flash10 使用剪贴板得改变程序的写法了
昨天一个客户告诉我,在她的电脑上无法复制图片的链接地址. 一开始,我以为是她操作有误,因为在我们的系统里使用的是一种“双保险”的复制方法. javascript + flash 两种方法来进行复制. ...
- 2: Eclipse反编译工具Jad及插件JadClipse配置
Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java,javac命令是一样的.不过因为是控制台运行,所以用起来不太方便.不过幸好有一个eclipse的插件JadClipse ...
- re正则模块(二十五)
一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 r ...
- 邮件发送-》http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
昨天使用发送邮件报了一个错 http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256 主 ...
- 九、java容器
目录 一.容器的概念 二.Cpllection接口 三.Iterator接口 四.增强的for循环 五.Set接口 六.List接口和Comparable接口 八.Map接口 九.自动打包/解包 十. ...
- 51job_selenium测试
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- CM记录-Hadoop 分布式文件系统HDFS(登录、配置、监控)
1.登录(浏览器输入ip地址:7180,登录用户名和登录密码即可) 2.CM主界面(各个组件,监控图表,绿色代表运行正常.黄色代表运行不良,需要关注根据实际情况调整,红色代表故障,需要排查问题) 3. ...
- jcaptcha和kaptcha验证码使用入门【转】
jcaptcha和kaptcha验证码使用入门 一.jcaptcha验证码使用 jcaptcha使用默认样式生成的验证码比较难以识别,所以需要自定义验证码的样式,包括,背景色.背景大小.字体.字体大小 ...
- u-boot移植(十三)---代码修改---裁剪及环境变量 二
一.错误处理 上一节遇到一个错误: print一下: 发现我们在jz2440.h中静态写的网络参数都没有写进去. dm9000 address not set. dm9000的地址未设置. 这里对应两 ...
- 开始学习tensorflow
搭建神经网络: 准备数据 定义数据输入层 定义网络隐藏层和预测层 定义loss 表达式 选择optimizer使得loss 最小 import tensorflow as tf import nump ...